我正在尝试使用微软的OpenXML 2.5库来创建OpenXML文档。一切都很正常,直到我尝试在文档中插入HTML字符串。我已经在网上搜索过了,到目前为止,我想出的是以下内容(只删减到我遇到麻烦的部分):
Paragraph paragraph = new Paragraph();
Run run = new Run();
string altChunkId = "id1";
AlternativeFormatImportPart chunk =
document.MainDocumentPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.Html, altChunkId);
chunk.FeedData(new MemoryStream(Encoding.UTF8.GetBytes(ioi.Text)));
AltChunk altChunk = new AltChunk { Id = altChunkId };
run.AppendChild(new Break());
paragraph.AppendChild(run);
body.AppendChild(paragraph);
显然,我实际上并没有在这个例子中添加altChunk,但是我已经尝试将它添加到任何地方--运行、段落、正文等。
这让我有点疯狂,因为它看起来应该是简单的(我承认我没有完全理解AltChunk的“东西”)。都会很感谢你的帮助。
附注:我确实发现了一件有趣的事情,我不知道这是否真的是一个问题,那就是this response,它说AltChunk在从MemoryStream工作时会损坏文件。有谁能证实这是真的/不是真的?
发布于 2015-01-16 06:11:17
在这里也有同样的问题,但原因完全不同。如果接受的解决方案不起作用,那么值得一试。尝试在保存后关闭该文件。在我的例子中,这恰好是一个损坏的docx文件和一个干净的docx文件之间的区别。奇怪的是,大多数其他操作只使用Save()和程序出口。
String cid = "chunkid";
WordprocessingDocument document = WordprocessingDocument.Open("somefile.docx", true);
Body body = document.MainDocumentPart.Document.Body;
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("<html><head></head><body>hi</body></html>"));
AlternativeFormatImportPart formatImportPart = document.MainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html, cid);
formatImportPart.FeedData(ms);
AltChunk altChunk = new AltChunk();
altChunk.Id = cid;
document.MainDocumentPart.Document.Body.Append(altChunk);
document.MainDocumentPart.Document.Save();
// here's the magic!
document.Close();
https://stackoverflow.com/questions/18089921
复制相似问题