2016-12-12 90 views
0

Apache-POI(v3.15)を使用して既存のxlsxファイル(Ms-excel 2010)を追加してデータを追加しようとしています。既存のxlsxファイルをピボットテーブルで開くときにApache-POIによってスローされた "Zip bomb detected"例外

既存のXLSXファイル(サイズ700KB)がpivot tables、チャート等

File file = new File(FILE_PATH); 
OPCPackage opcPackage = OPCPackage.open(file); 
XSSFWorkbook wbk = new XSSFWorkbook(opcPackage); 

とタブの数を含むがスローされた例外は以下の通りである、に起因

:java.io. IOException:ジップ爆弾が検出されました!ファイルは です。圧縮ファイルサイズと拡張データサイズとの比。これは、ファイルが のメモリ使用量を膨らませるために使用されていることを示している可能性があり、セキュリティ上のリスクを引き起こす可能性があります。この制限を超えるファイルを で使用する必要がある場合は、ZipSecureFile.setMinInflateRatio()を使用して、この の制限を調整できます。カウンター:819241、cis.counter:8192、 比:0.009999499536766349Limits:MIN_INFLATE_RATIO:0.01 org.apache.poi.openxml4j.util.ZipSecureFile $ ThresholdInputStream.advance(ZipSecureFile.java:257)

Iで
1.「ZipSecureFile.setMinInflateRatio()」を変更してtihを修正しようとしましたが、JVMがヒープスペースエラーでクラッシュしました(4GBを超えて割り当てても)
2. Inputsteam、Workbookfactoryを使用しようとしました。ワークブックを作成するために作成し、SXSSFとして開こうとしました。

しかし、これのどれも私のために働いていません。いずれかのアイデアがありますか?

+0

私は悲しいことにそれをテストすることはできませんが、実際には75kbがファイルの処理にスムーズに働くので、ファイルサイズの問題と思われます – XtremeBaumer

+0

700KBは私が見ることができるほど大きくないようですMBのサイズであってもファイルを管理できるはずです。そのことを言って、私は既存のピボットテーブル(サイズ約50Kb)のタブを1つだけ試してみたが、それでも同じ問題がある。だから、それはサイズよりもピボットテーブルとリファレンスに関するものです。 – sachinsd

+0

ピボットテーブルはどのように「大きく」なっていますか?彼らは拡大されていますか? – XtremeBaumer

答えて

1

私はこの問題に対する解決策を見つけましたが、多くのマイクロソフト関連の問題と同様に、根本的な原因を特定できませんでした。

このテンプレートは以前(データビットを削除するだけで)作業していたアナリストによって提供されたので、ファイルが問題である可能性が高いと感じました。

私がしたことは、各タブの最初から1つずつ作成された同じピボットテーブルを持つ新しいスプレッドシートを作成したことです(手作業ではあるが時間がかかりませんでした)。 最終的なテンプレートは60Kbだったので、これまでそこにある隠れたデータ/「何か見えないもの」があり、これが失敗する原因になっているに違いありません。

私はこのテンプレートを使用して新しいExcelシートを作成し、秒で600k行のデータを正常に追加できました。驚くばかり!

関連する問題