这是我得到的例外:
org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
我尝试打开的文件是.xls文件,我搜索了可能的解决方案,我找到了this和this,但我已经正确地做了这个,所以这不是问题
我的代码:
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)
有谁知道我哪里可以失败?谢谢大家。
答案 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之类的方式来处理它。