完整报错:
[com.bmw.tsic.tfs.config.GlobalExceptionHandler] No valid entries or contents found, this is not a valid OOXML (Office Open XML) file
org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file
at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.getNextEntry(ZipArchiveThresholdInputStream.java:159)
我遇到这种情况的原因是导入excel接口被用户上传了一个xls,而不是xlsx,我的代码写法是:
Workbook workbook = new XSSFWorkbook(file.getInputStream());
此时如果想支持xls和xlsx两个格式,只需改成:
Workbook workbook = WorkbookFactory.create(file.getInputStream());
WorkbookFactory.create()方法会自己判断文件格式,并返回给你对应文件格式的Workbook
=====================================================================================
但是我这么改了并不行,原因是用户上传的xls是Office 2003版本的xls,版本太老,POI解析时认为这不是一个excel文件,而是一个XML文件,继续报错,报错信息如下:
java.io.IOException: Can’t open workbook - unsupported file type: XML
org.apache.poi.poifs.filesystem.NotOLE2FileException: The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported
java.lang.IllegalArgumentException: org.apache.poi.poifs.filesystem.NotOLE2FileException: The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported
这种情况下 我没有找到解决办法,我尝试将用户文件读取为流并保存为本地的一个xlsx文件,但失败了,原理我认为和在外边改了文件的拓展名一样,改完不一定可用,不推荐这种解决办法,因为即使成功了也一定不是稳健的做法。
如果有遇到这种情况并且解决了的大佬可以在评论区说下是怎么做的,互相学习。
2万+

被折叠的 条评论
为什么被折叠?



