【发布时间】:2016-07-09 09:20:45
【问题描述】:
我的代码旨在创建一个 docx 文档,从多个文档中提取部分并将它们合并为一个。
private void CopyContent(WordprocessingDocument sourceDoc, WordprocessingDocument targetDoc)
{
// copy parts from source document to new document
foreach (var part in sourceDoc.Parts)
targetDoc.AddPart(part.OpenXmlPart, part.RelationshipId);
using (var sr = new StreamReader(sourceDoc.MainDocumentPart.GetStream()))
using (var sw = new StreamWriter(targetDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(sr.ReadToEnd());
}
targetDoc.MainDocumentPart.Document.Save();
}
代码只是一个片段,它适用于由 Office 2013 创建的docx,但如果文档是由 Office 2013 保存为 docx 的doc(由旧版本的 office 创建),它将失败。
一旦执行targetDoc.MainDocumentPart.Document.Save(),就会出现以下错误。
{"The root XML element \"http://purl.oclc.org/ooxml/wordprocessingml/main:document\" in the part is incorrect. The expected root XML element is: \"http://schemas.openxmlformats.org/wordprocessingml/2006/main:document\"."}
这是什么意思?我该如何解决?
【问题讨论】:
-
您具体使用了哪些步骤将其转换为 docx?
-
来自 Office 2013
Save As -> .docx -
嗯,从您显示的错误消息来看,该文档已保存为 Word 2003 XML,而不是 Word 2013 docx(Word Open XML)。可能需要在 Word UI 中再次打开文件并使用 CONVERT 函数,无论是在 VBA 中还是在 UI 中使用 File/Convert。
-
Word 2003 XML不会有 .xml 扩展名吗?
标签: c# exception openxml wordprocessingml