Delphi System.Zip xlsx LibreOffice
Delphi System.Zip xlsx LibreOffice
我的系统是WIN7 64位,我使用Delphi XE7组件创建.xlsx文件。一个例子 result file.
这些文件可以用 MS Office 打开(没问题),但是用 LibreOffice 我不能,因为我有这个错误:"The file is corrupted and can't be openend ..."。怀疑 System.Zip 以某种方式错误地打包了文件。
LibreOffice Calc 没有显示任何关于为什么它无法打开我的文件的详细信息。我不知道如何开始逐项列出问题。
为了理解归档方法的原因,我做了以下操作。
解压缩文件并使用 WinRar 再次打包。
将其重命名为 *.xlsx 和 vuala。
现在可以打开了。
这是重新打包后的新文件
https://yadi.sk/i/bSr6g8xDh3Yde
我使用 XE2 System.Zip 创建了 ODS 和 XLSX 并且 OpenOffice.org 可以很好地打开它们
你能要求你的 xlsx 生成组件使用另一个 zip 引擎吗?
既然话题发起人报告说他重新打包了 zip 并上传了两个文件进行比较 - 我删除了大部分答案
因为你做了重新包装测试...
我确认两个文件之一无法在 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 格式规范并修复了它。许多商业 zip 库都知道新手的这个失误并默默地修复了这个错误。但是 System.Zip 按照您的指示逐字工作,因此它会将您的错误按原样传播到 XLSX 文件中。
这是我的想法,但 Whosebug 是程序员的站点,所以我请您向我们展示您的所有代码,内容存储的实现。所以我们应该能够检查您的代码并查看
我请你向我们展示你在 XML 生成器和 System.Zip 打包器之间使用的代码,当你在某个缓冲区中得到一些 spreashsheet 时 - 你究竟如何将它放入 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//worksheets//sheet1.xml'
那样同时使用两个斜杠
你违反了#1,你似乎没有违反#2和#3,但记住它们以后不要上当。
从磁盘打开文件允许这些怪癖并在移动中修复它们,但 zip 解析器通常不是。
另外,请考虑共同开发一个每个人都通用的库,而不是制作你自己的临时库并独自解决所有问题。
我的系统是WIN7 64位,我使用Delphi XE7组件创建.xlsx文件。一个例子 result file.
这些文件可以用 MS Office 打开(没问题),但是用 LibreOffice 我不能,因为我有这个错误:"The file is corrupted and can't be openend ..."。怀疑 System.Zip 以某种方式错误地打包了文件。
LibreOffice Calc 没有显示任何关于为什么它无法打开我的文件的详细信息。我不知道如何开始逐项列出问题。
为了理解归档方法的原因,我做了以下操作。 解压缩文件并使用 WinRar 再次打包。 将其重命名为 *.xlsx 和 vuala。
现在可以打开了。
这是重新打包后的新文件 https://yadi.sk/i/bSr6g8xDh3Yde
我使用 XE2 System.Zip 创建了 ODS 和 XLSX 并且 OpenOffice.org 可以很好地打开它们
你能要求你的 xlsx 生成组件使用另一个 zip 引擎吗?
既然话题发起人报告说他重新打包了 zip 并上传了两个文件进行比较 - 我删除了大部分答案
因为你做了重新包装测试...
我确认两个文件之一无法在 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 格式规范并修复了它。许多商业 zip 库都知道新手的这个失误并默默地修复了这个错误。但是 System.Zip 按照您的指示逐字工作,因此它会将您的错误按原样传播到 XLSX 文件中。
这是我的想法,但 Whosebug 是程序员的站点,所以我请您向我们展示您的所有代码,内容存储的实现。所以我们应该能够检查您的代码并查看
我请你向我们展示你在 XML 生成器和 System.Zip 打包器之间使用的代码,当你在某个缓冲区中得到一些 spreashsheet 时 - 你究竟如何将它放入 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//worksheets//sheet1.xml' 那样同时使用两个斜杠
你违反了#1,你似乎没有违反#2和#3,但记住它们以后不要上当。
从磁盘打开文件允许这些怪癖并在移动中修复它们,但 zip 解析器通常不是。
另外,请考虑共同开发一个每个人都通用的库,而不是制作你自己的临时库并独自解决所有问题。