如何在ASP.NET应用程序中查询Word docx文件?

5
我想要将Word 2007或更高版本的docx文件上传到我的Web服务器,并将目录转换为一个简单的xml结构。在桌面上使用传统的VBA进行此操作似乎很容易。但是,查看用于创建docx文件的WordprocessingML XML数据非常令人困惑。有没有一种(无需COM)以更面向对象的方式浏览文档的方法?
3个回答

4

我强烈推荐您了解Open XML SDK 2.0。虽然它是CTP版本,但我发现它在处理xmlx文件时非常有用,而且完全不需要涉及COM。文档可能有点简略,但需要查找的关键内容是DocumentFormat.OpenXml.Packaging.WordprocessingDocument类。如果将扩展名改为.zip并深入XML文件,您可以分解.docx文档。从中可以看出,目录包含在“结构化文档”标签中,而标题之类的内容则在超链接中。通过一些尝试,我发现以下代码应该有效(或者至少可以作为起点)。

WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false);
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First();
List<string> contentList = new List<string>();
foreach (Hyperlink section in contents.Descendants<Hyperlink>())
{
    contentList.Add(section.Descendants<Text>().First().Text);
}

3

这是一篇关于使用LINQ to XML查询Open XML WordprocessingML文档的博客文章。使用该代码,您可以编写以下查询:

using (WordprocessingDocument doc =
    WordprocessingDocument.Open(filename, false))
{
    foreach (var p in doc.MainDocumentPart.Paragraphs())
    {
        Console.WriteLine("Style: {0}   Text: >{1}<",
            p.StyleName.PadRight(16), p.Text);
        foreach (var c in p.Comments())
            Console.WriteLine(
              "  Comment Author:{0}  Text:>{1}<",
              c.Author, c.Text);
    }
}

博客文章:Open XML SDK 和 LINQ to XML
-Eric

0

请参考XML文档和数据作为起点。特别是,您需要使用LINQ to XML。

一般来说,在.NET应用程序中不建议使用COM。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接