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

解决

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

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

总结

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

相关文章

  • Eclipse插件开发实现控制台输出信息的方法

    Eclipse插件开发实现控制台输出信息的方法

    今天小编就为大家分享一篇关于Eclipse插件开发实现控制台输出信息的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 关于junit单元测试@Test的使用方式

    关于junit单元测试@Test的使用方式

    这篇文章主要介绍了关于junit单元测试@Test的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot系列教程之防重放与操作幂等

    SpringBoot系列教程之防重放与操作幂等

    同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击,下面这篇文章主要给大家介绍了关于SpringBoot系列教程之防重放与操作幂等的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java实现简单员工管理系统

    Java实现简单员工管理系统

    这篇文章主要为大家详细介绍了Java实现简单员工管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入理解Java中@Accessors和@Builder

    深入理解Java中@Accessors和@Builder

    本文主要介绍了@Accessors和@Builder使用,区别与坑,对使用这两个注解的有一定的帮助,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 五种SpringBoot实现数据加密存储的方式总结

    五种SpringBoot实现数据加密存储的方式总结

    这篇文章主要为大家详细介绍了五种常见数据加密存储的方法(结合SpringBoot和MyBatisPlus框架进行实现),文中的示例代码讲解详细,需要的可以参考下
    2023-11-11
  • 配置SpringBoot方便的切换jar和war的方法示例

    配置SpringBoot方便的切换jar和war的方法示例

    这篇文章主要介绍了配置SpringBoot方便的切换jar和war的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Java图片处理开源框架Thumbnailator

    Java图片处理开源框架Thumbnailator

    这篇文章主要为大家详细介绍了Java图片处理开源框架Thumbnailator的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java+Springboot搭建一个在线网盘文件分享系统

    Java+Springboot搭建一个在线网盘文件分享系统

    本主要介绍了通过springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百度网盘非常类似,可以实现文件的上传、移动、复制、下载等,需要的可以参考一下
    2021-11-11
  • Java编程guava RateLimiter实例解析

    Java编程guava RateLimiter实例解析

    这篇文章主要介绍了Java编程guava RateLimiter实例解析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论