7

使用 OpenXML SDK,我想将基本的 HTML 片段插入 Word 文档。

你会怎么做:

  • 直接操作 XML 吗?
  • 使用 XSLT 吗?
  • 使用 AltChunk ?

此外,C# 或 VB 示例非常受欢迎 :)

4

3 回答 3

6

这是另一个(相对较新的)替代方案

http://notesforhtml2openxml.codeplex.com/

于 2011-03-09T21:02:39.137 回答
5

好吧,很难给出一般性的建议,因为这在很大程度上取决于您的输入什么是最好的。

下面是一个使用 OpenXML SDK v2.0 和 XPathDocument 为 (X)HTML 文档中的每个段落插入一个段落到 DOCX 文档中的简单示例:

    void ConvertHTML(string htmlFileName, string docFileName)
    {
        // Create a Wordprocessing document. 
        using (WordprocessingDocument package = WordprocessingDocument.Create(docFileName, WordprocessingDocumentType.Document))
        {
            // Add a new main document part. 
            package.AddMainDocumentPart();

            // Create the Document DOM. 
            package.MainDocumentPart.Document = new Document(new Body());
            Body body = package.MainDocumentPart.Document.Body;

            XPathDocument htmlDoc = new XPathDocument(htmlFileName);

            XPathNavigator navigator = htmlDoc.CreateNavigator();
            XmlNamespaceManager mngr = new XmlNamespaceManager(navigator.NameTable);
            mngr.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");

            XPathNodeIterator ni = navigator.Select("//xhtml:p", mngr);
            while (ni.MoveNext())
            {
                body.AppendChild<Paragraph>(new Paragraph(new Run(new Text(ni.Current.Value))));
            }

            // Save changes to the main document part. 
            package.MainDocumentPart.Document.Save();
        }
    }

该示例要求您的输入是有效的 XML,否则在创建 XPathDocument 时会出现异常。

请注意,这是一个非常基本的示例,没有考虑任何格式、标题、列表等。

于 2008-11-25T11:28:43.017 回答
2

我不确定,您实际上想要实现什么。OpenXML 文档对格式化元素(如段落、粗体文本等)有自己的类似 html (WordprocessingML) 的表示法。如果您想在文档中添加一些具有基本格式的文本,而不是我建议使用 OpenXML 语法并用它来格式化插入的文本。

如果您有一个必须包含在文档中的 html 片段,则可以使用 OpenXML 的“外部内容”功能。使用外部内容,您可以将 HTML 文档包含到包中,并在要包含此内容的位置的文档中创建引用 (altChunk)。此解决方案的缺点是,并非所有工具都会支持(或正确支持)生成的文档,因此我不推荐此解决方案,除非您确实无法更改 HTML 源。

如何将任何内容(wordml)包含到 openxml word doc 是一个独立的问题,恕我直言,答案在很大程度上取决于您要应用的复杂修改以及文档的大小。对于一个简单的文档,我会简单地从包中读出文档部分,获取它的流并将其加载到 XmlDocument。您可以很容易地将其他内容插入 XmlDocument,然后将其保存回包中。如果文档很大,或者您需要在多个地方进行复杂的修改,那么 XSLT 是一个不错的选择。

于 2008-10-13T06:55:33.260 回答