POI读取07版excel异常,急!!!

读取03版excel正常但是07会报下面的错误,
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException

6个回答

后缀虽然是xlsx但是会存在格式问题:
private Workbook getWorkbook(InputStream in) throws IOException,InvalidFormatException {
if (!in.markSupported()) { //hasPOIFSHeader和hasOOXMLHeader的要求,inputStream must support mark and reset, or be a PushbackInputStream
in = new PushbackInputStream(in, 8);
}
if (POIFSFileSystem.hasPOIFSHeader(in)) { //后缀是xlsx但是是ole2格式的或更低版本
return new HSSFWorkbook(in);
}
if (POIXMLDocument.hasOOXMLHeader(in)) { //后缀是xlsx但是是OOXML格式的或更高版本
return new XSSFWorkbook(OPCPackage.open(in));
}
throw new IllegalArgumentException("你的excel版本目前poi解析不了");
}


qq_34143827
qq_34143827 回复GrayHJX: 谢谢大神指教,分给你了
大约 4 年之前 回复
donggua3694857
GrayHJX 定义回缓存区大小而已,应该是无关紧要的。还是抛异常的话需要debug进去看看哪一步出问题了
大约 4 年之前 回复
qq_34143827
qq_34143827 回复GrayHJX: 还是读取失败,new PushbackInputStream(in, 8);这个缓解流的位数又怎么定呀
大约 4 年之前 回复
donggua3694857
GrayHJX 回复qq_34143827: 你一个文件流进来是可以同时兼容xls和xlsx的了
大约 4 年之前 回复
qq_34143827
qq_34143827 回复GrayHJX: 还是说上面写法已囊括所有情况了
大约 4 年之前 回复
qq_34143827
qq_34143827 回复GrayHJX: 那xls还要加判断来使用HSSFWorkbook,照上面的写法
大约 4 年之前 回复
donggua3694857
GrayHJX 回复qq_34143827: 这些格式什么的我也不知道是什么鬼~哈哈
大约 4 年之前 回复
donggua3694857
GrayHJX 回复qq_34143827: 我之前就是遇到这样的问题然后百度得出的解决方案。。
大约 4 年之前 回复
qq_34143827
qq_34143827 意思是说后缀xlsx还分两种?看不太懂呀,我就是很简单的判断而已
大约 4 年之前 回复

POI 读取 03版 用的是 HSSF, 07版及以后的是 XSSF, 你看一下是不是你用的不对

qq_34143827
qq_34143827 我加了判断后缀是xls用的是HSSFWorkbook,xlsx用的是XSSFWorkbook,不是用错这个的问题
大约 4 年之前 回复

我把POI的jar包都导入了正常说不会是缺少jar包的问题![图片说明](https://img-ask.csdn.net/upload/201608/22/1471859448_207030.png)图片说明

图片说明

pkjxt
不影响全局 jar包看过去应该没问题
大约 4 年之前 回复

建立excel的时候, 要在相应版本下建excel, 比如07版,要在office 07下建立这个Excel,如果把后缀改成 .xls当作03版是不对的,会报错,如果还有问题,你看看数据量,03和07支持的数据量是不一样的

qq_34143827
qq_34143827 支持数据量不一样,但是我只用几条数据进行测试,03版的是可以的,但是发布上去后别人机子新建的07excel文档导入失败报我说的那个错,debug调试过程就是在new XSSFWorkbook(intputStream)这里报错了
大约 4 年之前 回复

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐