(Zip), а затем убедитесь, что библиотека rubyzip не выполняет ничего, что запрещено (например, используется метод сжатия IMPLODE).

отаю над написанием кода, который может читать / писать файлы Excel XLSX. Файлы xlsx - это просто zip-архивы из нескольких файлов xml, поэтому, чтобы проверить, могу ли я написать файл, я использовал гем под названиемrubyzip разархивировать файл xlsx и сразу же заархивировать его обратно в новый архив, не изменяя данные. Однако, когда я делаю это, я не могу открыть новый файл Excel, он считается поврежденным.

В качестве альтернативы, если я использую служебную программу архивирования Mac OS X (собственное приложение для обработки ZIP-файлов) и распаковываю и повторно упаковываю ZIP-файлы в файл Excel, данные не повреждаются, и я могу открыть полученный файл в Excel.

Я обнаружил, что это не «разархивировать» функциональностьrubyzip это «портит» данные, но процесс zip. (Фактически, когда я использую Archive Utility для нового zip-файла,rubyzip создает, файл снова читается 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

Ответы на вопрос(1)

Ваш ответ на вопрос