- 问题
- 问题
- 常见的几类对象对应的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。
个人推荐依赖版本(以前使用3.8,现在使用4.1.2)想要了解更多关于三个对象的区别及优缺点可以去 https://www.cnblogs.com/skyislimit/articles/10514719.html
org.apache.poi poi4.1.2 org.apache.poi poi-ooxml4.1.2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)