【问题标题】:InvalidDataException by saving an OpenXml document保存 OpenXml 文档时出现 InvalidDataException
【发布时间】: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


【解决方案1】:

您需要在处理之前将.doc 文件转换为.docx。为此,您可以使用Microsoft.Office.Interop.Word 库。

一些例子here

【讨论】:

  • 但我没有加载 doc 文件...我有一个 docx 文件,它是一个 doc。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
相关资源
最近更新 更多