5

我想将 Word 2007 或更高版本的 docx 文件上传到我的 Web 服务器,并将目录转换为简单的 xml 结构。使用传统 VBA 在桌面上执行此操作似乎很容易。查看用于创建 docx 文件的 WordprocessingML XML 数据令人困惑。有没有办法(没有 COM)以更面向对象的方式导航文档?

4

3 回答 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);
}
于 2009-08-19T01:04:44.733 回答
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);
    }
}

博客文章:打开 XML SDK 和 LINQ to XML

-埃里克

于 2011-04-25T01:56:29.443 回答
0

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

通常,您不想在 .NET 应用程序中使用 COM。

于 2009-08-18T21:58:36.377 回答