POI 大数据量导出Excel文件 出现内存溢出
测试数据一共 6W多条。
自己采用的Excel大数据量导出方案是:
1、分多个sheet导出数据,每个sheet的数据每次从数据库单独获取,比如获取2W条;
2、生成的一个多sheet的临时 EXCEL文件先存储在服务器某个临时目录中,文件名通过唯一标识确认;
3、下载该临时Excel文件。
但是在执行到写第三个sheet页,写Cell 的时候(cell.setCellValue)开始报OOM内存溢出。
这个方案有没有问题?或者各位有没有别的好的方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
10W行试试
参考这个
http://apidoc.cn/blog/archives/42
真心谢了! ^_^地址换了,还记得重新发给我!
http://apidoc.cn/archives/47
回复
到时候用office打开都费劲了,更别说用java了。
回复
10W行打开没问题
jxl到了上万行也会有瓶颈,但是开打jvm内存就好了。楼主可以试一试。把内存开到更大。
可以用SAX去导
当年我是二进制流直接写成BIFF格式,太苦B了
才发现 POI现在最新的是3.8版
SXSSF (Streaming Usermodel API)
已经很成熟了
官方DEMO中有个
Workbook wb = new SXSSFWorkbook(1000);
// keep 1000 rows in memory,
// exceeding rows will be
// flushed to disk
内存里一次只留 多少行
我试了写10W行,一会就写完了
王道啊
===============
试了20列,50W行
完全无问题,内存占用真的是很少,再也不怕OOM了
简单表格的话,可以导出为csv。
使用jxl试试,大数据量poi就是有问题。
你好,我这边支持导出TXT格式文件,共12W的数据量,java写入txt文件,会导致内存溢出。你有啥好的解决思路不? :)
回复
五个字,代码写错了
回复
精辟!
非常感谢,测试了 15万,速度飞快!没有什么内存溢出的问题
Workbook wb = new SXSSFWorkbook(1000);这个意思是内存中缓存1000行数据 ,超过1000行的数据下次在循环遍历到内存中,是这个意思吗?还是其他意思。lz解释下白,不太懂,谢谢了。
当年我是二进制流直接写成BIFF格式,太苦B了
才发现 POI现在最新的是3.8版
SXSSF (Streaming Usermodel API)
已经很成熟了
官方DEMO中有个
Workbook wb = new SXSSFWorkbook(1000);
// keep 1000 rows in memory,
// exceeding rows will be
// flushed to disk
内存里一次只留 多少行
我试了写10W行,一会就写完了
王道啊
===============
试了20列,50W行
完全无问题,内存占用真的是很少,再也不怕OOM了