首页 > 解决方案 > 使用c#识别docx中的第一个表并打印目录中包含表的文档

问题描述

我需要检查大小约为 10 GB 的目录中的所有文件(尤其是“* .docx”),并过滤包含表格的文档名称。对于目录中的每个文件,我需要遍历文件的 Document 元素以查明打开的文档是否有表格。我需要在 C# 中完成这项工作。我来自测试领域,但他们给了我开发任务。请帮忙

标签: c#directorysubdirectory

解决方案


您可以使用DocumentFormat.OpenXmlnuget 包访问 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;
    }
}

推荐阅读