No valid entries or contents found, this is not a valid OOXML (Office Open XML) file

完整报错:
[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文件,但失败了,原理我认为和在外边改了文件的拓展名一样,改完不一定可用,不推荐这种解决办法,因为即使成功了也一定不是稳健的做法。
如果有遇到这种情况并且解决了的大佬可以在评论区说下是怎么做的,互相学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值