精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-10
开始使用POI的包,写1W笔左右就out of memory了 后来换用jxl,写1.8w笔左右报out of memory (我机器配置Pentium(R)D 3GHZ,双核,内存1G) 考虑到分批次写是否会好一些,每次先把数据写到一个临时文件,然后关闭流 再将临时文件读入后再往里写,可是发现这样还是不行 用jprofiler看了看内存使用状况,发现其实数据本身占空间并不是很大,而是每 一个cell会产生很多相关的对象(不管是POI还是jxl,jxl资源释放会快一些), 这些对象比数据本身占的空间要大得多,更郁闷的是即便是读入一个Excel文件, 也会为有值得cell自动产生这些对象 所以分批次写也行不通,因为中间产生的临时文件读入进来也可能耗光内存 现在能想到的解决方案:1.加内存,客户不乐意 2.替换成csv格式的文本,客户说这样产生文件数量太多也不乐意 不知各位还有什么高见? 谢谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-10
那分开为几个文件,大概客户也不乐意吧。
我想就很难有更好的办法, 以前我与一同事(主要是他写的)搞了一个象主流商业报表设计的一个东西,就是拿excel做模板,但是将读写excel单元格操作封装起来,将报表分成卡片式,列表式,主从式(分组),混和式,还有一个叫什么交叉式的,都是那同事搞的,我同他讨论了一下主从式报表分组统计及excel相对位置计算的问题,我觉的那哥们绝对称的上是一个编程高手。 我把这东西推荐给架构组,或许我推荐的方式有问题。非常的不屑一顾。在企业开发领域,做excel报表是极其普遍的一个东西。 而这个在读写excel文件级别上抽象到制作excel报表级别的业务实现组件,的确是一个非常好的东西。身为架构组的人员,对好的东西不予采纳,总在考虑自己的一些面子问题。 我笑。也只能如此,因为他们根本不在意他们架构的一些东西被下面的开发人员抱怨的。 唉,说来话长,不说也罢。 |
|
返回顶楼 | |
发表时间:2007-05-10
VBA的程序员比java的程序员水平提高的快
|
|
返回顶楼 | |
发表时间:2007-05-10
先写成csv文件,
然后,应能用VBA依次读入EXCEL再输出成一个文件吧。 |
|
返回顶楼 | |
发表时间:2007-05-10
我也在项目上遇到过这个问题,
一次可以导出2w左右的数据,再多就不行了, 因为项目上时间紧,后来的解决办法就是导成多个文件再合并.. |
|
返回顶楼 | |
发表时间:2007-05-10
一看到相关的讨论我就生气.
勾起了我一段伤心的记忆. 那时,我们公司一个技术牛人跟我说他用jxl成功的将30万条记录写入一个excel. 根本就是 吹牛.(当时是我们的领导让我们出一个导出数据的方案,他就是为了邀功吹牛.) 我随便问他几个相关的问题,他都说不清楚,来回搪塞我. 我让他给我看代码 给我看生成的30万条记录的excel文件都拿不 出来.找各种理由.最后反过来骂我,说我不相信他,怀疑他.还说我新来的算老几,他说我这种不相信别人的态度非常让他生气. 我当时差点吐血. |
|
返回顶楼 | |
发表时间:2007-05-10
呵呵,又是这类问题,不用想了,你目前的情况基本上是没有选择的,直接用Excel保存2行数据的一个html格式的文档出来,把这个文件作jsp模板,然后把数据列循环替换掉,如果不是web应用的话,反正也是替换字符串,fetch next rowset and replace。你可以保存这个文件到后缀名.xls,这种方式产生出来的xls文件,可以被Excel识别,并且格式、颜色、字体什么的基本没有变化,客户没有感觉的。
如果是web应用,输出的时候可以设置一下Content-Type,不过我忘记具体的Excel MIME字符串是什么了,google一下,Content-Type是Excel的话,客户端可以直接调用Excel来加载显示的。 |
|
返回顶楼 | |
发表时间:2007-05-11
SOAP toolkit,不要写Excel,让Excel自己去拉数据.
|
|
返回顶楼 | |
发表时间:2007-05-12
run_xiao 写道 最近需要往Excel写入海量数据,大约10W笔左右(超过6万会新建一个sheet再写)
开始使用POI的包,写1W笔左右就out of memory了 后来换用jxl,写1.8w笔左右报out of memory (我机器配置Pentium(R)D 3GHZ,双核,内存1G) 考虑到分批次写是否会好一些,每次先把数据写到一个临时文件,然后关闭流 再将临时文件读入后再往里写,可是发现这样还是不行 用jprofiler看了看内存使用状况,发现其实数据本身占空间并不是很大,而是每 一个cell会产生很多相关的对象(不管是POI还是jxl,jxl资源释放会快一些), 这些对象比数据本身占的空间要大得多,更郁闷的是即便是读入一个Excel文件, 也会为有值得cell自动产生这些对象 所以分批次写也行不通,因为中间产生的临时文件读入进来也可能耗光内存 现在能想到的解决方案:1.加内存,客户不乐意 2.替换成csv格式的文本,客户说这样产生文件数量太多也不乐意 不知各位还有什么高见? 谢谢 我用poi加载一个Excel大概快三M了,也出现过out of memory错误。 加大内存治标不治本,每个wb下面有多个sheet,每个sheet下有多个row,每个row下有多个cell等等对象太多,还是想其他方法为好。 而且每个sheet最多就25000多行吧 |
|
返回顶楼 | |
发表时间:2007-05-26
目前手头上的项目也需要导出数据,最大估计值有50w,jxl 1.8W就out,若分文件导出,客户肯定不会同意。
ray_linn能否多说几句关于如何让Excel自己去拉数据. |
|
返回顶楼 | |