Excel xlsx ファイルを読み書きできるコードの作成に取り組んでいます。xlsx ファイルは単にいくつかの xml ファイルの zip アーカイブであるため、ファイルを書き込めるかどうかをテストするために、呼ばれる gem を使用しrubyzip
て xlsx ファイルを解凍し、データを変更せずにすぐに新しいアーカイブに圧縮しました。 . ただし、これを行うと、新しいExcelファイルを開くことができません。破損していると言われています。
または、Mac OS X のアーカイブ ユーティリティ (zip ファイルを処理するためのネイティブ アプリケーション) を使用して、Excel ファイルを解凍して再圧縮すると、データは破損せず、結果のファイルを Excel で開くことができます。
rubyzip
データを「破損」させるのは「解凍」機能ではなく、zip プロセスであることがわかりました。(実際、rubyzip
作成された新しい zip ファイルに対して Archive Utility を使用すると、ファイルは再び 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