1

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
4

1 に答える 1

4

パッケージを準拠させるために、OOXML 形式が Zip の使用に課す多くの制約があります。たとえば、パッケージで許可されている唯一の圧縮方法は DEFLATE です。

OPC パッケージ (.XSLX ファイル) の仕様を、ここ(Zip) で入手できる標準の Annex C で確認してから、rubyzip ライブラリが許可されていないことを行っていないことを確認してください (IMPLODE の使用など)。圧縮方法)。

于 2011-05-29T11:26:52.070 に答える