使用阿里的easyexcel 导入xls类型Excel文件报错问题深挖

您所在的位置:网站首页 easyexcel读 使用阿里的easyexcel 导入xls类型Excel文件报错问题深挖

使用阿里的easyexcel 导入xls类型Excel文件报错问题深挖

2023-08-22 12:13| 来源: 网络整理| 查看: 265

1、报错如下: Xls must be available markSupported,you can do like this new BufferedInputStream(new FileInputStream(\"/xxxx\"))

翻译一下:这里报错重点意思xls必须要有这个标识markSupported必须为True,建议你用new BufferedInputStream(new FileInputStream(\"/xxxx\"))这种编码方式

解释一下:

大家都知道,只要用InputStream这个类中markSupported为false,但嵌套一层BufferedInputStream,BufferedInputStream中markSupported标识为true,这样就不会报错了。

下面这个是InputStream的源码截图

2、报错前提:

a、用以下方式会出现文中所说内容报错(InputStream方式xls文件类型报错,xlsx不会报错可正常使用)

InputStream inputStream = new FileInputStream(path);

ExcelReader excelReader = EasyExcelFactory.getReader(inputStream, excelListener)

b、用一下方式获取不会出现文中所说内容(BufferedInputStream方式xls和xlsx文件类型都正常)

InputStream inputStream = new BufferedInputStream(new FileInputStream(path));

ExcelReader excelReader = EasyExcelFactory.getReader(inputStream, excelListener)

3、有BufferedInputStream可以解决报错问题,为什么不用?

1 用BufferedInputStream方式是可以导入xls类型文件但是导入的获取的值全是String类型

2 举个例子:

就这样一个简单的数字,那么实际到后台转换后会变成这样的字符串"36,041,348.28"带逗号后是没办法转换成bigDecimal类型很是麻烦。

4、一探究竟,为何esayexcel支持xlsx文件类型导入,而不支持xls呢?

注:以下是不用BufferedInputStream情况,深入解析到底是哪里出的问题。

Step1: 

首先进入esayexcel中的ExcelReader这一步,图片中红框是获取文件类型,这里我发现xlsx和xls文件类型皆获取不到,那为什么xlsx能导入,而xls就不行呢?继续往下走。

step2:

这步也是关键一步,这个就是获取类型step1这块为啥用InputStream去接,类型都会空,我以为xlsx这块会返回类型呢,没想到xlsx和xls都是获取不到类型,凭啥xlsx就这么任性,xls就被拒之门外?往下走,最后一步见分晓。

step3:

如下图所示:

A这块代码根据类型不等于空,那么上两步得知xlsx和xls文件类型都获取不到这个excelType,都是空。

B必走此块代码重点是分析一下这个try,catch代码吧。

1这块代码是xlsx格式文件,这也就是为什么用InputStream流去接xlsx格式Excel文件可以正常导入。

继续往下看,那这里如果是我们导入xls格式Excel文件,却用XlsxSaxAnalyser去处理肯定报错到catch中被捕获。

cash中红框重点的重点在这里,这里又进行了一次markSupported判断,首先这个判断我没太理解意义何在,

因为如果markSupported不是false的话肯定能获取类型,不会到else这步里。

然后这里如果markSupported为false的情况直接抛出异常了,大家看到了这个判断下面的2 即是处理xls文件格式的方法。

“世界上从来没有这么近的距离,我却与你那么远!”

5 总结

1 如果这里有阿里工程师帮我解答一下为何哪里要再判断一下markSupported为true再去用XlsSaxAnalyser去分析文件

2 如果没有为什么,希望阿里大神看见文章,可以将此修改一下,将判断去掉即可。

3 谢谢大家观看,原创不易,希望大家点赞转发,让阿里大神帮解答哈哈哈



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3