编辑:
正如我在本主题中解释的那样:https://stackoverflow.com/questions/24282732/how-to-fix-a-corrupted-zip-file,我认为程序损坏了zip元数据。
你知道为什么以及如何解决它?
当我发现一个非常奇怪的错误时,我正在关注此链接:http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/03/28/132189.aspx。
程序结束后,如果我尝试打开docx,Word会告诉我文件已损坏。实际上,docx没有被破坏。嵌入式电子表格已损坏。
导致此问题的文件是sheet1.xml。除数据更改外,程序还会更改命名空间。但文件是正确的。
如果从docx中提取电子表格,则从电子表格中提取文件sheet1.xml,最后将文件注入电子表格,将电子表格注入docx,文件不再损坏。
我只是提取了sheet1.xml,仅此而已。我不明白发生了什么......可能你们其中一人会有解释。
提前致谢!
答案 0 :(得分:1)
这就是我修复它的方法。不是更好的方法,但没有任何更好的解决方案,我与你分享:
首先:打开Word文档并找到图表。找到图表后,检索链接电子表格的名称:
xlsx = chartPart.EmbeddedPackagePart.Uri.OriginalString;
然后,从Word文档中提取电子表格(我使用的是.NET 4.5 ZipArchive API):
using (var archivePPT = ZipFile.Open("Template3.docx", ZipArchiveMode.Read))
{
var entry = archivePPT.GetEntry(xlsx.Remove(0,1));
entry.ExtractToFile("c:\\tmp\\" + xlsx.Split('/').Last());
}
然后,我将编辑提取的电子表格数据和单词缓存数据,如博客文章中所述。
最后,我将电子表格添加回word文档:
using (var archivePPT = ZipFile.Open("Test3.docx", ZipArchiveMode.Update))
{
archivePPT.GetEntry(xlsx.Remove(0, 1)).Delete();
archivePPT.CreateEntryFromFile("c:\\tmp\\" + xlsx.Split('/').Last(), xlsx.Remove(0,1));
}