xlsx comprimido por rubyzip no legible por Excel
Estoy trabajando en escribir código que pueda leer / escribir archivos Excel xlsx. Los archivos xlsx son simplemente archivos zip de varios archivos xml, por lo que para probar si podía escribir un archivo, utilicé una gema llamadarubyzip
para descomprimir el archivo xlsx y luego volver a comprimirlo inmediatamente en un nuevo archivo, sin modificar los datos. Cuando hago esto, sin embargo, no puedo abrir el nuevo archivo de Excel, se dice que está dañado.
lternativamente, si uso la Utilidad de Archivo de Mac OS X (la aplicación nativa para manejar archivos zip), y descomprimo y vuelvo a comprimir un archivo de Excel, los datos no están dañados y puedo abrir el archivo resultante en Excel.
He descubierto que no es la funcionalidad 'descomprimir' derubyzip
que "corrompe" los datos, pero el proceso zip. (De hecho, cuando uso Archive Utility en el nuevo archivo zip querubyzip
crea, Excel puede volver a leer el archivo).
Me pregunto por qué sucede esto, y qué soluciones podría haber para comprimir los contenidos mediante programación de manera que sea legible por Excel.
Mi código para comprimir:
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