今晚用POI读取excel文件报了以下这个错,还是第一次见。可是.xlsx格式的文件用excel打开是正常。为啥会报错呢?
Exception in thread "main" java.io.IOException: Failed to read zip entry source
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:103)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:295)
at com.payeco.base.common.util.ExcelUtil.read(ExcelUtil.java:269)
at Test.main(Test.java:16)
Caused by: java.util.zip.ZipException: invalid entry size (expected 0 but got 1052 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:384)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:196)
at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureFile.java:220)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
原因:对比生成excel文件的代码和读取excel的代码,终于发现了问题,
生成excel文件时用的是:
SXSSFWorkbook wb = new SXSSFWorkbook(100); wb.setCompressTempFiles(true);
读取文件用的:
XSSFWorkbook
SXSSFWorkbook 生成的excel 用XSSFWorkbook读取就会报错,因为前者开启了压缩。所以要特别处理一下。