论坛首页 Java企业应用论坛

解决大批量数据导出Excel产生内存溢出的方案

浏览 39717 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-06-08  
楼主,为什么都用你第二个类也不能合并成一个多sheet的xls文件?

我说下我的理解:表中有17w条数据,每5000条一个文件,现在有35个文件。现在我用你的第二程序,期望生成一个包含35个sheet的xls文件。但是现在合并之后是一个65000多行的一个sheet的xls文件。

0 请登录后投票
   发表时间:2009-06-08  
呵呵,没看到这些

/** 
   * 将多个Xls文件合并为一个,适用于只有一个sheet,并且格式相同的文档 
   * @param inputs 输入的Xls文件,第一个XLS文件必须给出足够sheet空间 
   * 例如,总共200000行数据,第一个文件至少3个空白sheet 
   * @param out 输出文件 
   */


我新建了一个空的包含4个sheet的空xls后,导入数据还是内存溢出了,不知道楼主有没有测试到这种情况。
0 请登录后投票
   发表时间:2009-06-09  
flyinglife 写道
呵呵,没看到这些

/** 
   * 将多个Xls文件合并为一个,适用于只有一个sheet,并且格式相同的文档 
   * @param inputs 输入的Xls文件,第一个XLS文件必须给出足够sheet空间 
   * 例如,总共200000行数据,第一个文件至少3个空白sheet 
   * @param out 输出文件 
   */


我新建了一个空的包含4个sheet的空xls后,导入数据还是内存溢出了,不知道楼主有没有测试到这种情况。

没有遇到。
我所说的情况,是客户对格式要求很严格,比如表头加粗什么的,如果没有这样的要求,导出为CSV格式就可以,这样肯定不会溢出的。
0 请登录后投票
   发表时间:2009-06-09  
cats_tiger 写道
flyinglife 写道
呵呵,没看到这些

/** 
   * 将多个Xls文件合并为一个,适用于只有一个sheet,并且格式相同的文档 
   * @param inputs 输入的Xls文件,第一个XLS文件必须给出足够sheet空间 
   * 例如,总共200000行数据,第一个文件至少3个空白sheet 
   * @param out 输出文件 
   */


我新建了一个空的包含4个sheet的空xls后,导入数据还是内存溢出了,不知道楼主有没有测试到这种情况。

没有遇到。
我所说的情况,是客户对格式要求很严格,比如表头加粗什么的,如果没有这样的要求,导出为CSV格式就可以,这样肯定不会溢出的。



楼主,您的程序可不可以改动之后支持特别大的数据量呢,还有多sheet.我们客户要求xls格式。所以这个问题挺棘手的。
0 请登录后投票
   发表时间:2009-06-10  
flyinglife 写道
cats_tiger 写道
flyinglife 写道
呵呵,没看到这些

/** 
   * 将多个Xls文件合并为一个,适用于只有一个sheet,并且格式相同的文档 
   * @param inputs 输入的Xls文件,第一个XLS文件必须给出足够sheet空间 
   * 例如,总共200000行数据,第一个文件至少3个空白sheet 
   * @param out 输出文件 
   */


我新建了一个空的包含4个sheet的空xls后,导入数据还是内存溢出了,不知道楼主有没有测试到这种情况。

没有遇到。
我所说的情况,是客户对格式要求很严格,比如表头加粗什么的,如果没有这样的要求,导出为CSV格式就可以,这样肯定不会溢出的。



楼主,您的程序可不可以改动之后支持特别大的数据量呢,还有多sheet.我们客户要求xls格式。所以这个问题挺棘手的。

应该是可以的,但是我现在没有时间改了

0 请登录后投票
   发表时间:2009-07-02  
你好,看了你的这个帖子对我帮助很大。
但在我的项目中又碰到了问题……
我在实验11个文件,每个文件1W行,5列,速度很快,大概就11秒的样子。
但是当11个文件,每个文件1W行,但列变为20列的时候,数据要8W多条的时候又报OOM了......
看了你的程序想改动,但又无从下手...
我想问题是,你的程序,最后一次写入,inputStream中的数据过大,OOM...
我暂时的思路是,从inputStream[1]开始,每个读取完毕都写入一次,如此循环,不知道这样行不?
0 请登录后投票
   发表时间:2009-07-02  
写入的时候flush一下试试,任何优化都是有局限的,没有万金油。
如果用户对格式要求不严格,建议还是用csv格式,然后打包成zip比较好。我的方案是被BT客户逼出来的。
0 请登录后投票
   发表时间:2009-07-02  
其实在fins的GT-Grid的例子中有一个很好的方案,写出的也是纯正的excel。只是不知道能否导出多个sheet,以后有时间了研究一下。
0 请登录后投票
   发表时间:2009-07-02  
cats_tiger 写道
写入的时候flush一下试试,任何优化都是有局限的,没有万金油。
如果用户对格式要求不严格,建议还是用csv格式,然后打包成zip比较好。我的方案是被BT客户逼出来的。

我需要的格式不多,只要分sheet存储就行。
csv格式不能分sheet的吧,郁闷……
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics