使用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进行了数据或者文件压缩导致的,于是我搜索了下,没有任何有用的信息,浪费了我好一会儿时间。

解决

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

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

总结

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

相关文章

  • Mybatis注解开发@Select执行参数和执行sql语句的方式(最新详解)

    Mybatis注解开发@Select执行参数和执行sql语句的方式(最新详解)

    @Select 是 Mybatis 框架中的一个注解,用于执行 SQL 查询语句,并把查询结果映射到指定的 Java 对象中,这篇文章主要介绍了Mybatis注解开发@Select执行参数和执行sql语句的方式,需要的朋友可以参考下
    2023-07-07
  • MyBatis中有关int和Integer的使用方式

    MyBatis中有关int和Integer的使用方式

    这篇文章主要介绍了MyBatis中有关int和Integer的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Mybatis-Plus条件构造器的具体使用方法

    Mybatis-Plus条件构造器的具体使用方法

    这篇文章主要介绍了Mybatis-Plus条件构造器的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • JavaEE实现文件下载

    JavaEE实现文件下载

    这篇文章主要介绍了JavaEE实现文件下载的方法,非常的实用,需要的朋友可以参考下
    2014-10-10
  • Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate整合使用方法及原理详解

    这篇文章主要介绍了Spring JdbcTemplate整合使用方法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 深入理解Java中HashCode方法

    深入理解Java中HashCode方法

    这篇文章主要介绍了深入理解Java中HashCode方法,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • springbooot使用google验证码的功能实现

    springbooot使用google验证码的功能实现

    这篇文章主要介绍了springbooot使用google验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 基于雪花算法实现增强版ID生成器详解

    基于雪花算法实现增强版ID生成器详解

    这篇文章主要为大家详细介绍了如何基于雪花算法实现增强版ID生成器,文中的示例代码讲解详细,对我们学习具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名操作

    SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名操作

    这篇文章主要介绍了SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • JavaWeb Spring依赖注入深入学习

    JavaWeb Spring依赖注入深入学习

    这篇文章主要为大家详细介绍了JavaWeb Spring依赖注入,深入学习Spring依赖注入,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论