论坛风格切换切换到宽版
  • 249阅读
  • 0回复

[Java]POI导出慢2000条1分钟 优化导出 [复制链接]

上一主题 下一主题
离线路灯
 

发帖
669
金币
3670
威望
1901
股份
300
用JavaPOI导出Excel时,我们会考虑到Excel版本及数据量的问题。针对不同的Excel版本,要采用不同的工具类。
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。

org.apache.poi.openxml4j.exceptions.InvalidOperationException
org.apache.poi.poifs.filesystem.OfficeXmlFileException


从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF
当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。


注意:针对 SXSSF Beta 3.8下,会有临时文件产生,比如:
poi-sxssf-sheet4654655121378979321.xml
文件位置:java.io.tmpdir这个环境变量下的位置
Windows 7下是C:\Users\xxxxxAppData\Local\Temp
Linux下是 /var/tmp/
要根据实际情况,看是否删除这些临时文件


与XSSF的对比
在一个时间点上,只可以访问一定数量的数据
不再支持Sheet.clone()
不再支持公式的求值


在使用Excel模板下载数据时将不能动态改变表头,因为这种方式已经提前把excel写到硬盘的了就不能再改了


总结:
excel导出工具:HSSFWorkBook,XSSFWorkBook,SXSSFWorkBook,第一种用于03版的导出,后两种用于07版的导出,其中SXSSFWorkBook用于百万级数据的导出,推荐使用



 
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个