1

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

5 回答 5

12

只需使用 org.apache.poi.ss.usermodel.WorkbookFactory而不是创建实例:new HSSFWorkbook() 或 new XSSFWorkbook()。

Workbook exWorkBook = WorkbookFactory.create(excelInputStream);
于 2012-11-15T21:46:02.977 回答
3

不是您可能想听到的答案。但是我发现当密码错误时出现此错误。检查对 Decryptor.verifyPassword() 的调用是否在您的代码中返回 true。如果是这样,密码应该没问题。

对我来说,我得到了一个错误,代码被忽略并尝试读取文件。然后我得到“包应该包含内容类型部分 [M1.13]”错误。一旦我输入了正确的密码,我得到了真正的回报,并且文件被解密了。

希望这可以帮助

于 2013-05-02T17:58:48.690 回答
1

我使用 POI,有时当发生这种情况时,您只需要尝试找出问题。以下是我过去所做的事情,以帮助找出问题所在:

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

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

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

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

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

于 2012-04-14T00:46:57.613 回答
0

如果您使用的是开放式办公室并尝试以 xlsx 格式保存文件,您仍然会收到错误消息;同样使用 xssf 也不能解决问题。您需要使用 Microsoft Office Excel 工作表来避免错误。

于 2014-02-19T11:09:56.607 回答
0

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

于 2016-01-08T13:22:38.663 回答