我遇到了有老师给我反馈说用我的小工具去辅助编辑课件的时候,遇到了他使用 WPS 制作的文档打开失败,原因是 WPS 制作的一些文档不符合压缩文档规范。而 Office 的基于 ECMA 376 的文档,都是使用标准的 ZIP 压缩规范的文档,因此对于这些不符合压缩文档规范的文件,将会解析失败
如果使用了不符合压缩规范的文件,那么在使用 OpenXML SDK 读取的时候,将会在解压缩的时候炸掉,如下
或者下面提示
在读取到 System.IO.InvalidDataException End of Central Directory record could not be found. 就是因为压缩文档不符合规范,或者文件损坏
而给我反馈的老师的课件其实只是压缩文档不符合规范,我使用 Office 2016 打开,此时会提示文档损坏
当然了,点击修复还是能打开课件的
但是我的工具无法通过 OpenXML SDK 读取
解决方法就是先使用其他压缩库进行解压缩和压缩,这样的文件就符合压缩规范了
如使用 DotNetZip 进行解压缩,在 csproj 上添加下面代码,用来安装 DotNetZip 这个 NuGet 库。当然了,使用 NuGet 安装也可以
接下来使用下面代码进行解压缩,然后压缩
这样文件就符合压缩规范了,以上代码特别使用运行时提供的压缩方法
本文的代码放在 github 欢迎小伙伴访问
更多请看 Office 使用 OpenXML SDK 解析文档博客目录
原文链接: http://blog.lindexi.com/post/dotnet-OpenXML-%E8%A7%A3%E6%9E%90-WPS-%E4%B8%8D%E7%AC%A6%E5%90%88%E5%8E%8B%E7%BC%A9%E6%96%87%E6%A1%A3%E8%A7%84%E8%8C%83%E7%9A%84%E6%96%87%E6%A1%A3
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。