我正在尝试使用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。
但这一切对我都没有用。有人有任何想法吗?
答案 0 :(得分:1)
所以我找到了问题的解决方案,但与许多微软相关的问题一样,我无法找到根本原因。
由于此模板是由之前处理过的分析师提供的(仅删除数据位),我觉得excel文件可能是一个问题。
我做的是,我开始使用在每个标签中逐个创建的相同数据透视表的新电子表格(有点手动工作,但不需要很长时间)。 最终的模板是60Kb所以必须有一些隐藏的数据/"一些看不见的东西"之前有过这种情况并导致失败。
我设法使用此模板创建新的Excel工作表,并在几秒钟内成功添加了大约600k行的数据。真棒!
答案 1 :(得分:0)
回答这个问题太晚了。 希望它能帮助人们面对同样的问题。
对我来说有效的是
ZipSecureFile.setMinInflateRatio(0.0);
您可以在这里查看说明