当前位置: 首页 > 面试题库 >

Java POI中的InvalidFormatException

蒙光华
2023-03-14
问题内容

这是我得到的例外:

org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

我试图打开的文件是.xls文件,我搜索了可能的解决方案,发现了这个和这个问题,但是我已经正确地做到了,所以这不是问题。

我的代码:

InputStream file = new FileInputStream(new File(path));
org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file);
org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(sheetNumber);

sheetNumber是一个int值(在我的软件中始终为0),并且路径正确无误,在发布此代码之前,我多次测试了这两次,以确保不会出现故障。引发异常的行是:

org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file);

(如果需要有关代码的更多详细信息,可以在这里找到整个类)

有谁知道我在哪里失败?谢谢你们。


问题答案:

提一些评论答案

您的第一个问题是所使用的Apache POI的版本。如果要使用POI 3.15 beta 1或更高版本,在这种情况下,您将获得更多有用的Exception。

在POI 3.15 beta
1和更高版本中,您将获得ODFNotOfficeXmlFileException消息,例如:

ODFNotOfficeXmlFileException: The supplied data appears to be in ODF (Open Document) Format. Formats like these (eg ODS, ODP) are not supported, try Apache ODFToolkit

实际上,通过在模式下使用Apache Tika CLI
App
,您可以找到(并且已经找到了,谢谢!)--detect。如您所见,application/vnd.oasis.opendocument.spreadsheet这就是一个OpenDocument格式的电子表格,通常带有.ods扩展名。因此,有人将.ods文件重命名为.xlsx,虽然可以使Excel打开它,但不会神奇地改变格式!

Apache POI不支持ODF格式,因此您需要将文件转换为真正的Excel格式,或者使用Apache ODF
Toolkit之类的文件
进行处理。



 类似资料:
  • 我试图在我的测试自动化框架中实现一个数据驱动的方面。我已经创建了一个fe函数,它似乎工作正常,可以检索参数的列/行数,从特定单元格获取数据,更新特定单元格等等。 我现在正在用一个基本上有2列的脚本进行测试。第一列是用户名,第二列是密码。我可以遍历这些行,列没有问题。 我遇到了一个问题,如果有一个空白单元格,它会崩溃,但我通过一些错误处理解决了这个问题,如果有一个黑色单元格,它会返回字符串“空单元格

  • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的

  • 当应用程序启动EncryptionBootstrapConfiguration无法自动装配我的自定义TextEncryptor-https://github.com/spring-cloud/spring-cloud-commons/blob/cde7c7f3118382490c28776f66e0a56f248141fd/spring-cloud-context/src/main/java/or

  • 我有一个问题,找出我的源代码中的错误。 有什么办法可以解决它吗? 我的代码中抛出了“ArrayIndexOutOfBoundsException”,但我无法找到它的位置。 android studio中的logcat: