【发布时间】:2011-05-27 14:16:07
【问题描述】:
我正在编写可以读/写 Excel xlsx 文件的代码。 xlsx 文件只是几个 xml 文件的 zip 存档,所以为了测试我是否可以编写文件,我使用了一个名为 rubyzip 的 gem 来解压缩 xlsx 文件,然后立即将其压缩回一个新存档,没有修改数据。但是,当我这样做时,我无法打开新的 excel 文件,据说它已损坏。
或者,如果我使用 Mac OS X 的存档实用程序(处理 zip 文件的本机应用程序),并且我解压缩并重新压缩 Excel 文件,数据不会损坏,我可以在 Excel 中打开生成的文件。
我发现不是rubyzip 的“解压缩”功能“损坏”了数据,而是压缩过程。 (事实上,当我在 rubyzip 创建的新 zip 文件上使用存档实用程序时,Excel 再次可以读取该文件)。
我想知道为什么会发生这种情况,以及有什么解决方案可以以 Excel 可读的方式以编程方式压缩内容。
我的压缩代码:
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
【问题讨论】:
-
为什么要在这里重新发明轮子? XLSX Gem 我想你忘记了序列化。
标签: ruby excel zip xlsx rubyzip