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

3
我正在尝试使用OpenXML 2.5 SDK创建文档,具体细节请参见此处:https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.document.aspx。我的代码与此相同,但当我尝试打开创建的.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
似乎不太可能DrawingML会与WordProcessingML以相同的方式构建<p>、<r>和<t>。您如何在Word文档中获取该命名空间,分享代码。 - Sten Petrov
你是正确的。经过进一步调查,这是我的错误。我在添加文本时使用了DocumentFormat.OpenXML.Drawing作为命名空间,而不是DocumentFormat.OpenXML.Wordprocessing。非常感谢您的帮助。 - Kyle
2个回答

5

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

我在我的Text对象中使用了DocumentFormat.OpenXML.Drawing而不是DocumentFormat.OpenXML.Wordprocessing。这导致文本无法正确渲染并引发错误。


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>

这是因为您可能错过了许多依赖项。甚至检查您的[content_types].xml文件。 - KishanCS
问题在于我试图避免以后手动操作XML。我希望这个过程是由程序自动完成的。 - Kyle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接