"检测到拉链炸弹" Apache-POI在使用数据透视表

时间:2016-12-12 15:37:07

标签: java excel apache apache-poi xssf

我正在尝试使用Apache-POI(v 3.15)打开现有的xlsx文件(Ms-excel 2010)以附加更多数据。

现有的xlsx文件(大小为700Kb)包含多个带有pivot tables,图表等的标签页。

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

但抛出的异常如下,

  

造成:java.io.IOException:检测到Zip炸弹!该文件会   超过最大值压缩文件大小与大小的比率   扩展数据。这可能表示该文件用于膨胀   内存使用因此可能带来安全风险。你可以调整它   如果需要使用,请通过ZipSecureFile.setMinInflateRatio()进行限制   超过此限制的文件。专柜:819241,cis.counter:8192,   比率:0.009999499536766349Limits:MIN_INFLATE_RATIO:0.01 at   org.apache.poi.openxml4j.util.ZipSecureFile $ ThresholdInputStream.advance(ZipSecureFile.java:257)

我尝试过以下更改:
1.试图改变" ZipSecureFile.setMinInflateRatio()"修复tihs,但JVM崩溃堆空间错误(即使我分配了超过4GB)
2.尝试使用inputsteam,Workbookfactory.create创建工作簿,试图打开为SXSSF。

但这一切对我都没有用。有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

所以我找到了问题的解决方案,但与许多微软相关的问题一样,我无法找到根本原因。

由于此模板是由之前处理过的分析师提供的(仅删除数据位),我觉得excel文件可能是一个问题。

我做的是,我开始使用在每个标签中逐个创建的相同数据透视表的新电子表格(有点手动工作,但不需要很长时间)。 最终的模板是60Kb所以必须有一些隐藏的数据/"一些看不见的东西"之前有过这种情况并导致失败。

我设法使用此模板创建新的Excel工作表,并在几秒钟内成功添加了大约600k行的数据。真棒!

答案 1 :(得分:0)

回答这个问题太晚了。 希望它能帮助人们面对同样的问题。

对我来说有效的是

ZipSecureFile.setMinInflateRatio(0.0);

您可以在这里查看说明

https://community.pega.com/node/715956