识别 docx 中的第一个 table 并使用 c# 打印目录中包含 table 的文档
Identify the first table in docx and print which are the documents in a directory contains table in it using c#
我需要检查一个大小约为 10 GB 的目录中的所有文件(尤其是“*.docx”),并过滤包含 table 的文档的名称。对于目录中的每个文件,我需要遍历文件的文档元素以查明打开的文档是否有 table。我需要在 C# 中完成这项工作。我来自测试领域,但他们给了我开发任务。请帮助
您可以使用 DocumentFormat.OpenXml
nuget 包访问 docx 文件并在每个文件中找到 table。
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;
}
}
我需要检查一个大小约为 10 GB 的目录中的所有文件(尤其是“*.docx”),并过滤包含 table 的文档的名称。对于目录中的每个文件,我需要遍历文件的文档元素以查明打开的文档是否有 table。我需要在 C# 中完成这项工作。我来自测试领域,但他们给了我开发任务。请帮助
您可以使用 DocumentFormat.OpenXml
nuget 包访问 docx 文件并在每个文件中找到 table。
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;
}
}