使用OpenXML 2.5创建.docx会导致文件损坏

时间:2016-12-12 23:03:27

标签: c# ms-word openxml-sdk corruption

我正在尝试使用OpenXML 2.5 SDK创建文档,如下所示:

Screen.orientation

我的代码看起来与此相同,但是当我尝试打开创建的.docx文件时,我得到了

  

无法打开文件DocumentEx.docx,因为内容存在问题。

作为Microsoft Word中的错误

问题出在document.xml文件中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
    <w:document     xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
        <w:body>
            <a:p xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                <a:r>
                    <a:t>Hello, Word!</a:t>
                </a:r>
            </a:p>
        </w:body>
    </w:document>

如果我将XML更改为:

<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:body>
    <w:p>
      <w:r>
        <w:t>Hello, Word!</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

文件将会打开。

如何将此保存为已损坏?我必须遗漏一些大的东西,因为我从MSDN中提取的代码出现了这样的错误。

我正在使用Visual Studio 2010 .NET Framework v 4.6 SP1进行开发,并尝试使用Microsoft Word 2010打开这些.docx文件。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

我的问题是我添加的对象的命名空间不正确。

我使用DocumentFormat.OpenXML.Drawing作为Text对象而不是DocumentFormat.OpenXML.Wordprocessing。这不是正确渲染文本并导致我的错误。

答案 1 :(得分:0)

这可能是为了缺少许多标题。 以下代码确实解决了它。我用过office 2010

 <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
    <w:body>
    <w:p>
    <w:r>
    <w:t>Hello , word</w:t>
    </w:r>
    </w:p>
    <w:sectPr>
    <w:pgSz w:w="12240" w:h="15840"/>
    <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" w:footer="708" w:gutter="0"/>
    <w:cols w:space="708"/>
    <w:docGrid w:linePitch="360"/>
    </w:sectPr>
    </w:body>
    </w:document>