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

Excel导出导入时使用POI遇到的BUG,第1张

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

Excel导出导入时使用POI遇到的BUG
  • 问题
  • 问题
  • 常见的几类对象对应的excel文件版本的数据量及相应问题
  • 个人推荐依赖版本(以前使用3.8,现在使用4.1.2)

    我们日常工作中经常做一些数据的导入导出,应该经常使用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)
    
    
        org.apache.poi
        poi
        4.1.2
    
    
        org.apache.poi
        poi-ooxml
        4.1.2
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5563858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存