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

Respuestas a la pregunta(1)

Su respuesta a la pregunta