由rubyzip压缩的xlsx无法被Excel读取



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

或者,如果我使用Mac OS X的Archive Utility(处理zip文件的本地应用程序),解压缩并重新压缩excel文件,数据不会损坏,我可以在excel中打开结果文件。

我发现"破坏"数据的不是rubyzip的"解压缩"功能,而是压缩过程。(事实上,当我对rubyzip创建的新zip文件使用Archive Utility时,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

OOXML格式对Zip的使用施加了许多约束,以使包一致。例如,包中唯一允许的压缩方法是DEFLATE。

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

相关内容

  • 没有找到相关文章

最新更新