论坛首页 Java企业应用论坛

[请教]jxl生成xls时,支持"合并"或"磁盘缓存"吗(导出大数据量时)

浏览 15144 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-28  
jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选.

但是由于长时间没有接触jxl了 对他的新版本不是很了解,
不知道能不能实现我下面的几个需求, 还请大家多帮个忙.

在生成excel时, jxl 的做法是在内存中构造出一个xls文件的对象
然后在最后write时生成最终的excel文件.
也就是说,在把excel所有的数据全部准备完毕(加入到那个xls的对象中) 之前,
这个超大对象一直是在jvm的内存中的, 这就导致大批量数据,如 100列10万行, 根本无法生成 OOM了.

我想问的就是,  jxl是否支持生成若干个小的xls文件, 然后合并的功能(基于磁盘的合并, 而不是全部读入内存 在合并,这种合并还是要占用大量甚至更多的内存的,对于解决我的问题毫无帮助)

或者是 能不能让它在最终生成excel文件之前, 就把一部分内容写入磁盘的临时文件中,从而保证对内存的占用量一直维持在比较低的水平?

如果都不支持, 那么我想问一下 ,大家是怎么导出超大数据量的excel的?


P.S.: 哪位英语好 能不能帮我把我的问题反馈给 jxl的作者呢?
我觉得从技术角度来讲 我的那两个需求应该是完全能都实现的.


   发表时间:2008-07-28  
根据你的需求,JXL是没办法满足的,好像POI倒是可以满足!
0 请登录后投票
   发表时间:2008-07-28  
POI有基于jdk1.4 的 而且满足这个需求的 版本吗??

不用POI好多年了 

谢谢
0 请登录后投票
   发表时间:2008-07-30  
刚使用JasperReport产生excel做测试导出八万笔
结果也是挂掉了,JasperReport的excel有使用poi跟jxl

前一阵子处理JasperReport的大量数据产生PDF
资料量大概5~60万笔,是先产生swap file暂存档再产生成PDF

我想excel的大量数据短期应该很难实现
跟记忆体大小无关,主要JVM瞬间载入大量数据
就算AP分配记忆体很大,也都是会挂掉

看网路上有人用poi导入10万笔数据成功,应该也不是很稳定
我想解决方式就是暂存档、两个以上xls合并、或改写JDK
像IBM有自己的JDK,让他能暂缓瞬间载入

不用jxl、用ODBC方式分批写入xls不知道行不行

0 请登录后投票
   发表时间:2008-07-30  
这个我以前试过 , xls 的文件结构导致的不是那么容易做到追加数据的

不像是纯文本
0 请登录后投票
   发表时间:2008-07-31  
如果我没记错 excel2000最大行数好像是65535

不知道10万笔数据是如何导入的?
0 请登录后投票
   发表时间:2008-07-31  



baidu 到一个
http://zhidao.baidu.com/question/8374118.html?fr=qrl


这些计算机X级考试的问题,怎么会没被我们考虑到。。。
0 请登录后投票
   发表时间:2008-07-31  
你是来告诉我 世界上没有excel 2007的吗

谢谢了


0 请登录后投票
   发表时间:2008-07-31  
看了poi的源码,读取excel,有一个基于事件流的机制,能保持很小的内存占用,参照XLS2CSVmra这个例子。
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
6 请登录后投票
   发表时间:2008-08-01  
很不幸 excel2007 依然有行数限制

0 请登录后投票
论坛首页 Java企业应用版

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