由rubyzip压缩的xlsx不能被Excel读取

我正在编写可以读/写Excel xlsx文件的代码。 xlsx文件只是几个xml文件的zip文件,所以为了testing我是否可以编写一个文件,我使用了一个名为rubyzip的gem来解压缩xlsx文件,然后立即将其压缩回新的压缩文件,而不用修改数据。 但是,当我这样做时,我无法打开新的excel文件,据说这是损坏的。

或者,如果我使用Mac OS X的存档实用程序(本机应用程序来处理zip文件),并且我解压并重新压缩excel文件,数据没有损坏,我可以在Excel中打开生成的文件。

我发现rubyzip的“unzip”functionrubyzip “破坏”数据,而是压缩过程。 (实际上,当我在rubyzip创build的新zip文件上使用Archive Utility时,文件可以被Excel读取)。

我想知道为什么会发生这种情况,以及可以通过Excel以可读的方式编程压缩内容的解决scheme。

我的代码压缩:

 def compress(path) path.sub!(%r[/$],'') archive = File.join(path,File.basename(path))+'.zip' FileUtils.rm archive, :force=>true Zip::ZipFile.open(archive, 'w') do |zipfile| Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file| temp = file zipfile.add(file.sub(path+'/',''),file) end end end 

OOXML格式对Zip的使用有许多限制,以便使包符合要求。 例如,包中唯一允许的压缩方法是DEFLATE。

您可能需要检查此处可用标准(Zip)的标准附录C中的OPC软件包(哪些是.XSLX文件)的规范,然后确保rubyzip库没有做任何不允许的操作(例如使用IMPLODE压缩方法)。