c# - 使用c#识别docx中的第一个表并打印目录中包含表的文档
问题描述
我需要检查大小约为 10 GB 的目录中的所有文件(尤其是“* .docx”),并过滤包含表格的文档名称。对于目录中的每个文件,我需要遍历文件的 Document 元素以查明打开的文档是否有表格。我需要在 C# 中完成这项工作。我来自测试领域,但他们给了我开发任务。请帮忙
解决方案
您可以使用DocumentFormat.OpenXml
nuget 包访问 docx 文件并在每个文件中找到表。
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var files = FindFilesWithTable("<path_to_directory>");
foreach (var file in files)
{
Console.WriteLine(file);
}
}
static List<string> FindFilesWithTable(string directory)
{
// filter all docx files
var files = Directory.GetFiles(directory, "*.docx");
var filesWithTable = new List<string>();
foreach (var file in files)
{
try
{
// open file in read only mode
using (WordprocessingDocument doc = WordprocessingDocument.Open(file, false))
{
// find the first table in the document.
var hasTable = doc.MainDocumentPart.Document.Body.Elements<Table>().Any();
if (hasTable)
{
filesWithTable.Add(file);
}
}
}
catch(Exception ex)
{
Console.WriteLine("Cannot process {0}: {1}", file, ex.Message);
}
}
return filesWithTable;
}
}
推荐阅读
- powershell - 如何在 Pester 5 中为嵌套函数定义“It”测试?
- node.js - node.js readline:“TypeError:rl 不可迭代”
- angular - CodeSandbox 上的“没有 ErrorHandler 错误。是否包含平台模块(BrowserModule)”
- xcode13 - Xcode 13 - 在工具栏中隐藏 git 分支
- mysql - Mysql查询结果为每个类别生成月份(1-12)并按类别排列在同一列中
- asp.net-core - .net-core 没有立即释放大对象(在 linux 下)的原因可能是什么?
- python - 使用 Python 字典计算 txt 文件中的项目
- python - vscode 查找 jupyter 扩展的完整版本构建号
- javascript - 在 contenteditable true 元素中选择 contenteditable false 元素
- vue.js - vue 3 - 选择绑定问题,如果选择的选项未显示在新值中,则选择为空白,但不会更改为“”