OpenXML错误“文件已损坏,无法打开”。用于C#中的Word文档

时间:2011-03-17 23:12:22

标签: c# ms-word openxml

我使用Word 2007构建了一个Word文档并保存了它。然后我使用OpenXML生产力工具并使用代码反射来获取C#代码。

我做的下一步是构建一个返回tableRow对象的函数。 我会使用我用LINQ构建的列表来填充文本字段 排。我从1的内置行中复制了行生成代码 表,并使用

填充循环中的字段
foreach(ClassForLinqResult lr in LinqResult)
{
  Table1.Append(CreateRow(lr.param1,lr.param2..etc));
}

问题仍然存在,当服务器回复文件时, 我试图打开它时收到错误:

"The file is corrupt and cannot be opened".

我错过的部分代码是否需要在某处添加 否则我添加的行?事实证明,当我使用word来尝试恢复时 我的行显示正确。

损坏的文件有一个包文件夹,其中包含一个文件:

package\services\metadata\core-properties\edf684ae4e35438dacc06cb66c0afad2.psmdcp

更正文件后,它会删除该文件,并将core.xml文件添加到 “docProps”文件夹。

其他一些文件已更改

customXML\item.xml changes to customXML\item1.xml after recovery
customXML\itemProps.xml changes to customXML\itemProps1.xml after recovery
customXML\item.xml.rels changes to customXML\item1.xml.rels after recovery
word\footer.xml changes to word\footer1.xml after recovery
word\theme\theme.xml changes to word\theme\theme1.xml

无论如何,如果有人有一些工具可以为我指出问题,我会很感激。 我试过了

OpenXmlPackageValidationSettings validationSettings = new OpenXmlPackageValidationSettings();
validationSettings.EventHandler += new EventHandler<OpenXmlPackageValidationEventArgs>(PackageValidationEventHandler);
CreateParts(package,LicenseToPrint);
package.Validate(validationSettings);

这从未碰到任何表明验证有问题的代码。 我一直无法弄清楚word文档的问题。 任何人都可以帮助了解如何找出问题的想法?或许我错过了一步 这是导致我的问题?

其他信息:

此代码是我在asp.net中呈现docx文件的方式

GeneratedClass c = new GeneratedClass();
        using (MemoryStream generatedStream = new MemoryStream())
        {
            c.CreatePackage(generatedStream,LicenseToPrint);
            ValidateDocument(generatedStream);
            Response.ClearHeaders();
            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; FileName=\"License.docx\"");
            Response.ContentType = "application/msword";
            //Response.ContentType = "application/vnd.ms-word.document";
            generatedStream.WriteTo(Context.Response.OutputStream);
            Context.Response.Flush();
        }

2 个答案:

答案 0 :(得分:1)

我不确定原因是什么,但我再次重复我的步骤,现在有一个文件没有MS字的错误。从Open XML工具复制到我的代码中搞砸了。如果任何人做了类似的步骤,我的建议是重复你的步骤,它可能是在某处复制代码。问题是如果你已经编写了很多代码并且有太多的步骤需要追溯。在这种情况下,版本控制系统应该有所帮助。谢谢大家

答案 1 :(得分:0)

我没有答案。但我可以帮助排除一些可用的信息。

customXML\item.xml changes to customXML\item1.xml after recovery
customXML\itemProps.xml changes to customXML\itemProps1.xml after recovery
customXML\item.xml.rels changes to customXML\item1.xml.rels after recovery
word\footer.xml changes to word\footer1.xml after recovery
word\theme\theme.xml changes to word\theme\theme1.xml

不要担心重命名。 Microsoft Word喜欢为任何可以具有倍数的部分添加后缀编号。因此,当word恢复文档时,它会重新创建文档并使用其首选命名系统来处理这些文档。