使用POI的例外情况

时间:2012-04-13 14:01:50

标签: java apache-poi

我正在使用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

5 个答案:

答案 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,有时当发生这种情况时,您只需要进行实验以确定问题所在。以下是我过去做的事情,以帮助弄清问题是什么:

  1. 将文件转换为.xls格式并查看是否加载。如果是,请重新保存为.xlsx并重试。

  2. 如果文件有多个工作表,请尝试将每个工作表另存为一个单独的文件,看看它们是否可以加载,

  3. 如果将其缩小到特定的工作表,请加载工作表的部分内容并查看导致问题的部分。

  4. 通常,如果你使用这种“分而治之”的方法,你可以很快找出问题。

    公式和宏可能特别成问题。

答案 3 :(得分:0)

如果您使用开放式办公室并尝试以xlsx格式保存文件仍然会出现错误;也使用xssf没有解决目的。你需要使用Microsoft Office Excel表来避免错误。

答案 4 :(得分:0)

我发现我的xlsx文件已损坏,因此必须将其删除并重新创建。