Excel导出导入时使用POI遇到的BUG

    我们日常工作中经常做一些数据的导入导出,应该经常使用POI导出导入插件,对应的应该会经常遇到一些相
 关的Bug, 这里我将自己遇到的一些分享给大家,希望有所帮助!

问题

// 错误日志
org.apache.poi.poifs.filesystem.OfficeXmlFileException: 
The supplied data appears to be in the Office 2007+ XML. 
You are calling the part of POI that deals with OLE2 Office Documents. 
You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
解决办法
    首先看导入的excel 文件后缀名是否和接收对象一致,如果一致问题就在jar包依赖版本上面, 更换合适的版
本就能解决大部分问题。

问题

// 依赖冲突
java.lang.NoClassDefFoundError: org/apache/poi/xssf/streaming/SXSSFWorkbook
导致出现这个错误的原因是因为SXSSFWorkbook 这个对象,正常原因有可能是因为:
1、jar包中没有这个对象
2、依赖的jar包版本冲突
解决办法:
1、使用其他的对象来接受excel文件数据,以下是我所遇到的几类对象(不同版本的excel文档对应的不同对象)
HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook
2、使用新的jar包依赖

常见的几类对象对应的excel文件版本的数据量及相应问题

   HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;但是此种方式的局限就是导出
数据的行数最多为65535行,超出65536条后系统就会报错。此方式因为行数不足七万行所以一般不会发生内存不足
的情况;
   XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;XSSFWorkbook最多可以导出104万行,不过
会伴随着一个问题,会出现OOM内存溢出;
   SXSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;对于大型excel文件的创建,关键问题就是
要确保不会内存溢出,SXSSFWorkbook会将数据写入到硬盘中,内存中会保存最新的row数据,不占用内存很少,
不会出现内存溢出等问题,面对大数据量的文件时建议使用SXSSFWorkbook。

当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。推荐用SXSSFworkbook。

想要了解更多关于三个对象的区别及优缺点可以去 https://www.cnblogs.com/skyislimit/articles/10514719.html

个人推荐依赖版本(以前使用3.8,现在使用4.1.2)

    <!-- POI插件 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值