【发布时间】:2016-12-12 15:37:06
【问题描述】:
我正在尝试使用 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,顺式计数器:8192, 比率:0.009999499536766349 限制: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方式打开。
但是这些都对我不起作用。有人知道吗?
【问题讨论】:
-
这么大的 excel 文件我无法测试它,但它确实似乎是文件大小的问题,因为 75kb 的 excel 文件工作顺利
-
700KB 似乎并不比文件大,因为我可以看到它应该能够管理大小为 MB 的文件。话虽如此,我只尝试了一个带有现有数据透视表(大小约为 50Kb)的选项卡,但仍然是同样的问题。所以在我看来,它是关于数据透视表和引用而不是大小。
-
您的数据透视表有多“大”?他们扩大了吗?
-
没必要,其中一些非常小,我尝试只使用一个带有那个小数据透视表的选项卡,但仍然是相同的 zip 炸弹异常! (我不确定如何在此处提供这些数据透视表示例)
-
我认为您必须将它们上传到某个地方
标签: java excel apache apache-poi xssf