2011-03-17 280 views
2

我已经用Word 2007构建了一个Word文档并保存了它。然后我使用OpenXML生产力工具并使用代码反射来获取C#代码。OpenXML错误“文件已损坏,无法打开。”对于C#中的Word文档#

我做的下一步是构建一个返回tableRow对象的函数。 我将使用我用LINQ构建的列表填充行的 的文本字段。我从建在 表中的行,并填写在一个循环中的字段1复制的排辈代码,使用

foreach(ClassForLinqResult lr in LinqResult) 
{ 
    Table1.Append(CreateRow(lr.param1,lr.param2..etc)); 
} 

问题仍然存在,当服务器回来的文件进行响应, 我从Word试图打开它得到一个错误:

"The file is corrupt and cannot be opened". 

是否有我错过了代码的某些部分需要别的某处被添加 为我添加了行?事实证明,当我用字试图恢复文件时,我的行显示正确。

损坏的文件有一个包文件夹,像这样在这一个文件:

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); 

这嗟表示不存在与验证问题的任何代码。 我一直无法找出文档这个词的问题。 任何人都可以帮助一个想法如何找出问题?或者,也许我错过了导致我的问题的步骤 ?

附加信息:

这段代码是怎么了渲染的docx文件在asp.net

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(); 
     } 

回答

1

我不确定是什么原因,但我重复了我的步骤,现在有一个没有更多的错误与MS单词的文件。从Open XML工具复制到我的代码搞砸了某处。如果这种情况发生在任何正在进行类似步骤的人身上,我的建议是重复你的步骤,这可能是某处复制代码的地方。问题是如果你已经写了很多代码,并且有太多的步骤可以追溯。版本控制系统应该有助于这种情况。谢谢大家

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喜欢为任何可以具有倍数的部分添加后缀数字。所以当单词恢复文档时,它会重新创建文档并为这些部分使用其首选的命名系统。

+0

我刚刚补充说,如果它帮助有人弄清楚发生了什么事情:) – 2011-03-17 23:51:20

+0

对不起,我没有更多的帮助。我想我会分享我所知道的。 – 2011-03-18 00:04:28