将HTML插入OpenXML Word文档(.Net)

时间:2008-10-09 14:12:12

标签: .net openxml word-2007

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

你会怎么做:

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

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

3 个答案:

答案 0 :(得分:6)

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

http://notesforhtml2openxml.codeplex.com/

答案 1 :(得分:4)

嗯,很难给出一般建议,因为它很大程度上取决于你的输入什么是最好的。

这是一个简单的示例,使用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时会出现异常。

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

答案 2 :(得分:2)

我不确定,你真正希望实现的目标。 OpenXML文档对格式化元素(如段落,粗体文本等)有一个类似html的(WordprocessingML)表示法。如果您希望使用基本格式向文档添加一些文本,而不是建议使用OpenXML语法并使用该格式设置插入文本的格式。

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

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