使用easyexcel导出的excel文件,使用poi读取时异常处理方案

 更新时间:2023年12月01日 10:19:29   作者:橙巴布  
这篇文章主要介绍了使用easyexcel导出的excel文件,使用poi读取时异常处理方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

场景

一个导出服务,传入json数据,根据数据生成excel文件返回。

别的项目有一个需求,导出文件给用户修改,修改后再次导入。

之前一直没有问题,这一天,突然报了个 【文件读取失败】异常!!!(这里为后台的自定义异常信息,其原因是POI读取文件时抛出了异常)

经过研究发现,使用服务导出的excel文件大小是6kb,但是只要打开文件,再保存,哪怕什么都不修改,文件大小会变为11kb。然后再次导入时,就能正常导入。(问我之前为什么没问题?正经人导出来肯定是修改了再导回去啊!!!不然原数据导回去干嘛!!!)

但是,问题既然出现了,那肯定要解决嘛。于是,开始了一顿的搜索…肯定是没有搜索到,不然我就不写这个了(也可能是搜索得不到位O(∩_∩)O哈哈~)。

环境

easyexcel 2.2.6版本

找bug

现在下载了一个服务(使用easyexcel写的)导出的,没有经过修改的文件A.xlsx,然后复制了一份并命名B.xlsx.

  • A.xlsx 6kb 未修改
  • B.xlsx 11kb 原6kb,只是打开后点了保存。没有动任何数据!!!

现象: 

  • A文件上传报【文件读取失败】
  • B文件上传成功

这里把两个文件后缀改成rar(压缩文件格式都可以)

然后进行了两个文件的对比,有了以下发现:

  • A文件的shardStrings.xml中没有存放数据,它的数据存在worksheets/sheet1.xml
  • B文件的数据存放在shardStrings.xml中,而worksheets/sheet1.xml中只记录了sheet的一些配置信息

但是直接用office软件打开,不管哪个显示都是正常的,没有报错,数据也正常,说明它是兼容的,但是保存的时候,office会把A文件的存储格式转换为B文件

过程如图:

思路

我刚开始以为是easyexcel进行了数据或者文件压缩导致的,于是我搜索了下,没有任何有用的信息,浪费了我好一会儿时间。

解决

灵机一动,阿里的,应该有官方文档,搜索了下,真有官方文档

最终在文档在常见问题中找到了这个解决办法(当然,因为这里的业务是小模板数据填充,不涉及到大数据量,所以直接使用,如果有大数据量,按文档的解释是可能溢出的,各位按自己业务场景处理)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何理解和运用ClassLoader

    如何理解和运用ClassLoader

    这篇文章主要介绍了如何理解和运用 ClassLoader,帮助大家更好的理解和使用JVM,感兴趣的朋友可以了解下
    2021-01-01
  • Spring Boot利用@Async异步调用:使用Future及定义超时详解

    Spring Boot利用@Async异步调用:使用Future及定义超时详解

    这篇文章主要给大家介绍了关于Spring Boot利用@Async异步调用:使用Future及定义超时的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友可以参考下
    2018-05-05
  • 解决springboot报错找不到自动注入的service问题

    解决springboot报错找不到自动注入的service问题

    这篇文章主要介绍了解决springboot报错找不到自动注入的service问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • springboot项目以jar包运行的操作方法

    springboot项目以jar包运行的操作方法

    公司一个springboot项目本来是打war包的,突然要改为打jar包,不知所措了,纠结该如何操作呢,折腾半天终于搞定了,下面把解决方案分享给大家,对springboot打jar包方式感兴趣的朋友一起看看吧
    2021-06-06
  • mybatis 解决将数值0识别成空字符串的问题

    mybatis 解决将数值0识别成空字符串的问题

    这篇文章主要介绍了mybatis 解决将数值0识别成空字符串的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringCloud的Hystrix简单介绍

    SpringCloud的Hystrix简单介绍

    这篇文章主要介绍了SpringCloud的Hystrix简单介绍,SpringCloud Hystrix是Netflix开源的一款容错框架,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能,同样具有自我保护能力,需要的朋友可以参考下
    2023-07-07
  • SpringBoot2.0整合Shiro框架实现用户权限管理的示例

    SpringBoot2.0整合Shiro框架实现用户权限管理的示例

    这篇文章主要介绍了SpringBoot2.0整合Shiro框架实现用户权限管理的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 通过Feign进行调用@FeignClient 找不到的解决方案

    通过Feign进行调用@FeignClient 找不到的解决方案

    这篇文章主要介绍了通过Feign进行调用@FeignClient 找不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Feign调用接口解决处理内部异常的问题

    Feign调用接口解决处理内部异常的问题

    这篇文章主要介绍了Feign调用接口解决处理内部异常的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 详解Java的Struts框架中栈值和OGNL的使用

    详解Java的Struts框架中栈值和OGNL的使用

    这篇文章主要介绍了Java的Struts框架中栈值和OGNL的使用,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11

最新评论