xlsx compactado por rubyzip não legível pelo Excel
Estou trabalhando na escrita de código que pode ler / gravar arquivos xlsx do Excel. Os arquivos xlsx são simplesmente arquivos zip de vários arquivos xml; portanto, para testar se eu poderia escrever um arquivo, usei uma gema chamadarubyzip
para descompactar o arquivo xlsx e, imediatamente, compactá-lo novamente em um novo arquivo morto, sem modificar os dados. Quando faço isso, no entanto, não consigo abrir o novo arquivo do Excel, diz-se que ele está corrompid
or outro lado, se eu usar o Archive Utility do Mac OS X (o aplicativo nativo para lidar com arquivos zip) e descompactar e compactar novamente um arquivo do Excel, os dados não estão corrompidos e posso abrir o arquivo resultante no Exce
Descobri que não é a funcionalidade 'descompactar' derubyzip
que "corrompe" os dados, mas o processo zip. De fato, quando uso o Archive Utility no novo arquivo zip querubyzip
cria, o arquivo é novamente legível pelo Excel
Estou me perguntando por que isso acontece e que soluções podem existir para compactar o conteúdo programaticamente de uma maneira que seja legível pelo Exce
Meu código para fechar:
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