POI 大数据量导出Excel文件 出现内存溢出

发布于 2021-11-17 00:23:12 字数 383 浏览 700 评论 17

测试数据一共 6W多条。

自己采用的Excel大数据量导出方案是:

1、分多个sheet导出数据,每个sheet的数据每次从数据库单独获取,比如获取2W条;

2、生成的一个多sheet的临时 EXCEL文件先存储在服务器某个临时目录中,文件名通过唯一标识确认;

3、下载该临时Excel文件。

但是在执行到写第三个sheet页,写Cell 的时候(cell.setCellValue)开始报OOM内存溢出。

这个方案有没有问题?或者各位有没有别的好的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

泪冰清 2021-11-23 05:18:56

10W行试试

把昨日还给我 2021-11-23 05:18:56

真心谢了! ^_^地址换了,还记得重新发给我!

秋意浓 2021-11-23 05:18:54

回复
到时候用office打开都费劲了,更别说用java了。

一个人的旅程 2021-11-23 05:18:50

回复
10W行打开没问题

为你鎻心 2021-11-23 05:18:47

jxl到了上万行也会有瓶颈,但是开打jvm内存就好了。楼主可以试一试。把内存开到更大。

把昨日还给我 2021-11-23 05:18:45

可以用SAX去导

输什么也不输骨气 2021-11-23 05:18:41

当年我是二进制流直接写成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了

 

最偏执的依靠 2021-11-23 05:00:51

简单表格的话,可以导出为csv。

风柔一江水 2021-11-23 02:29:34

使用jxl试试,大数据量poi就是有问题。

别低头,皇冠会掉 2021-11-22 23:09:24

你好,我这边支持导出TXT格式文件,共12W的数据量,java写入txt文件,会导致内存溢出。你有啥好的解决思路不? :)

悸初 2021-11-22 11:58:50

回复
五个字,代码写错了

能否归途做我良人 2021-11-22 08:42:06

回复
精辟!

海之角 2021-11-21 21:18:09

非常感谢,测试了 15万,速度飞快!没有什么内存溢出的问题

风透绣罗衣 2021-11-21 19:52:59

Workbook wb = new SXSSFWorkbook(1000);这个意思是内存中缓存1000行数据 ,超过1000行的数据下次在循环遍历到内存中,是这个意思吗?还是其他意思。lz解释下白,不太懂,谢谢了。

自此以后,行同陌路 2021-11-17 15:09:27

当年我是二进制流直接写成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了

 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文