Delphi System.Zip xlsx LibreOffice

我的系统是WIN7 64,我使用Delphi XE7组件来创build.xlsx文件。 示例结果文件 。

该文件可以打开与MS Office(没问题),但与LibreOffice我不能因为我有这个错误:“文件已损坏,不能打开…”。 怀疑是System.Zip以某种方式错误地打包文件。

LibreOffice Calc不显示关于为什么无法打开我的文件的任何详细信息。 我不明白如何开始逐项列举问题。

要了解它的原因是在归档方法,我做了以下。 解压缩文件并使用WinRar重新打包。 将它重命名为* .xlsx和vuala。

现在可以打开它。

这是新的重新打包的文件https://yadi.sk/i/bSr6g8xDh3Yde

我用XE2 System.Zip来创buildODS和XLSX,OpenOffice.org打开它们

你可以问你的xlsx生成组件使用另一个zip引擎?

现在,主题发起人报告,他做了邮编重新上传,并上传两个文件进行比较 – 我删除了我的答案的大部分


既然你做了重新包装testing

我确认两个文件中的一个在OpenOffice 4.1.1 Win32和LibreOffice 4.2 Linux上无法打开

Libreoffice写入以下错误:

libreoffice4.2 ./Export.xlsx :1: parser error : Document is empty ^ 

有关错误的更多信息,请访问https://bugs.documentfoundation.org/show_bug.cgi?id=91579

_

在Windows下,没有办法得到一个错误日志,除了可能安装cygwin,我没有。


好的,现在我想起来了。 我猜两年前我犯了一个类似的错误……但是 – 如果这个假设成立的话 – 我设法阅读zip格式规范并修正它。 许多商业拉链库知道这个newbs的失误和默默修复这个错误。 但是,System.Zip按照您的要求逐字逐句执行,因此会将您的错误按原样传播到XLSX文件中。

这是我的想法,但StackOverflow是程序员的网站,所以我要求你向我们展示你所有的代码,你的内容存储的实现。 所以我们应该能够检查你的代码并看看

我要求你向我们展示你在XMLs生成器和System.Zip打包器之间使用的代码,当你在某个缓冲区中得到了一些spreash表 – 你怎么把它放到zip-xlsx文件中?

我的代码在这里(正确的执行存储生成的内容到zip文件),如果你在乎: https : //github.com/the-Arioch/avemey.com/tree/master/zexmlss


主题起动添加:

  FZipFile.Add(Data, 'xl\worksheets\sheet1.xml'); 

疑难杂症! – 在这里你违反了ZIP格式的规范。 回头看看我的lib源代码和它的名字修复…

  • 你应该使用正常的斜线“/”,而不是反斜杠“\”
  • 你不应该使用像/ xl / worksheets / sheet1.xml这样的斜杠来启动文件名
  • 你不应该使用两个斜杠像'xl //工作表// sheet1.xml'

你违反#1,你似乎没有违反#2和#3,但要记住不要在将来降临它。

从磁盘打开文件是容许这些怪癖,并在旅途中修复它们,但zipparsing器通常不是。

另外请考虑共同开发一个共同的每个人的图书馆,而不是自己做一个临时的,单独解决所有问题。