使用OpenXML SDK,我想将基本的HTML片段插入到Word文档中。
你会怎么做:
此外,C#或VB的例子非常受欢迎:)
答案 0 :(得分:6)
这是另一个(相对较新的)替代
答案 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是一个不错的选择。