主要测试了jexcelapi和apache的poi两个工具
由于数据量很大都出现了内存不足
java.lang.OutOfMemoryError: Java heap space
jvm的最大内存使用值我设到了100m
因为可能会多线程同时跑这个应用所以不考虑再给多内存了
jexcelapi在每个cell20byte输出65535*15到极限
65535*16就爆了
poi更小一点(这取决于两个工具数据结构设计的不同)
他们都是采用等数据收集完成然后一次写入的方式
读取也是一次把整个文件全部读入内存的方式工作
更新也是整个workbook的copy
所以可以理解对内存开销之大
请问针对excel处理还有没有更好的工具包
或者对这写包是否有针对这个问题的改写方案
------解决方法--------------------------------------------------------
多半是你代码问题。数据量大可以分成几次写入,这个完全可以由你控制的。
------解决方法--------------------------------------------------------
你可以尝试一下用csv格式,这样就可以不用那些API,直接往csv文件里写(该文件是用“,”将数据分隔开的文本文件)
------解决方法--------------------------------------------------------
excel本来就只能65535行吧
------解决方法--------------------------------------------------------
shiwen1981(reinhardt) ( ) 信誉:100 Blog 加为好友 2007-04-26 11:44:33 得分: 0
我考虑过每次写一定数据量
但这两个包更新时都首先要把整个excel读取到内存
也就是说不存在分批写入的可能
谢谢你的回复
===================================================
excel是输出,你一次把内存中的数据分几次写到几个wookbook不就可以了~
为什么非要一次把所有数据都写到同一个wookbook呢!
------解决方法--------------------------------------------------------
我想你需要了解Java堆内存和设置一下参数,内存不可能不够用,
你在命令行加入下列的参数-Xms512m -Xmx1024m,我想也许不需要这么大的内存
------解决方法--------------------------------------------------------
数据量大肯定要分次写入excel,比如每个单sheet只写入1万行,有10万行数据就生成10个sheet.这样就避免了内存不足和excel单sheet最多行限制的问题.
------解决方法--------------------------------------------------------
倒,这是个问题,顶!!!!我的项目马上也要搞生成excel报表了.......
------解决方法--------------------------------------------------------
java下操作excel推荐使用jxcell,商业组件,功能强大。
支持excel的绝大部分功能,包括公式(目前已支持260多个,并且可以实时计算),格式(颜色、字体、边框、甚至样式)、图表(条形图、柱状图、饼图、线图等)、图形对象(线条、矩形、多边形、图片)等等。还可以把excel直接导出为PDF文件。
jxcell在大数据量操作时内存占用比jxl、poi少,速度快(需要关闭实时计算模式)。