(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