我正在使用poi 3.7,上传文件是.xlsx
控制台显示:
org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:41)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:186)
at poi.POITest.ReadAndPrintExcelFile(POITest.java:15)
at poi.POITest.main(POITest.java:59)
Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:147)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:592)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:222)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)
... 3 more
答案 0 :(得分:12)
只需使用
org.apache.poi.ss.usermodel.WorkbookFactory
而不是创建实例:new HSSFWorkbook()或新的XSSFWorkbook()。
Workbook exWorkBook = WorkbookFactory.create(excelInputStream);
答案 1 :(得分:3)
不是您可能想听到的答案。但我发现密码错误时会出现此错误。 检查对代码中的Decryptor.verifyPassword()调用是否返回true。如果是这样,密码应该没问题。
对我来说,我得到了一个假,并且代码被忽略并且无论如何都尝试读取该文件。然后我得到“包应该包含内容类型部分[M1.13]”错误。 一旦我输入正确的密码,我得到了真实的回复,文件被解密了。
希望这有帮助
答案 2 :(得分:1)
我使用POI,有时当发生这种情况时,您只需要进行实验以确定问题所在。以下是我过去做的事情,以帮助弄清问题是什么:
将文件转换为.xls格式并查看是否加载。如果是,请重新保存为.xlsx并重试。
如果文件有多个工作表,请尝试将每个工作表另存为一个单独的文件,看看它们是否可以加载,
如果将其缩小到特定的工作表,请加载工作表的部分内容并查看导致问题的部分。
通常,如果你使用这种“分而治之”的方法,你可以很快找出问题。
公式和宏可能特别成问题。
答案 3 :(得分:0)
如果您使用开放式办公室并尝试以xlsx格式保存文件仍然会出现错误;也使用xssf没有解决目的。你需要使用Microsoft Office Excel表来避免错误。
答案 4 :(得分:0)
我发现我的xlsx文件已损坏,因此必须将其删除并重新创建。