Java POI中的InvalidFormatException

时间:2016-03-14 16:37:17

标签: java excel apache-poi

这是我得到的例外:

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

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

我的代码:

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);

(如果您想了解有关代码的更多详细信息,可以找到整个班级Here

有谁知道我哪里可以失败?谢谢大家。

1 个答案:

答案 0 :(得分:1)

向答案提出一些意见

您的第一个问题是您正在使用的Apache POI版本。如果您使用POI 3.15 beta 1或更新版本,那么在这种情况下您将获得更有帮助的例外。

在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

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

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