- 浏览: 2585434 次
- 性别:
- 来自: 小胖儿的大城
文章分类
最新评论
-
ni4wangba0:
ni4wangba0 写道亲测,算法有问题。对不起,其实是我自 ...
谈谈"求线段交点"的几种算法(js实现,完整版) -
ni4wangba0:
亲测,算法有问题。
谈谈"求线段交点"的几种算法(js实现,完整版) -
kers007:
苹果不让Webapp 在appstore 里发布,我不知道对 ...
苹果真的要在 AppStore 里封杀 WebApp 吗? -
striveandlive:
fins = js大牛
[原创]GT-Template, 一个超轻量级的js模板工具. -
AlwaysYang:
基础扎实的才能行走天下。
关于body的"大小"在ie和ff下的一些基础知识
jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选.
但是由于长时间没有接触jxl了 对他的新版本不是很了解,
不知道能不能实现我下面的几个需求, 还请大家多帮个忙.
在生成excel时, jxl 的做法是在内存中构造出一个xls文件的对象
然后在最后write时生成最终的excel文件.
也就是说,在把excel所有的数据全部准备完毕(加入到那个xls的对象中) 之前,
这个超大对象一直是在jvm的内存中的, 这就导致大批量数据,如 100列10万行, 根本无法生成 OOM了.
我想问的就是, jxl是否支持生成若干个小的xls文件, 然后合并的功能(基于磁盘的合并, 而不是全部读入内存 在合并,这种合并还是要占用大量甚至更多的内存的,对于解决我的问题毫无帮助)
或者是 能不能让它在最终生成excel文件之前, 就把一部分内容写入磁盘的临时文件中,从而保证对内存的占用量一直维持在比较低的水平?
如果都不支持, 那么我想问一下 ,大家是怎么导出超大数据量的excel的?
P.S.: 哪位英语好 能不能帮我把我的问题反馈给 jxl的作者呢?
我觉得从技术角度来讲 我的那两个需求应该是完全能都实现的.
nihongye说的目前可能是POI处理大数据量excel的正道,类似SAX处理XML的方式。不使用LOW LEVEL 和EVENT API的话则类似DOM处理XML的方式。
http://poi.apache.org/hssf/how-to.html#event_api
下一步POI的主要日程:
哇,POI出新版本了,看来的确是正道。
nihongye说的目前可能是POI处理大数据量excel的正道,类似SAX处理XML的方式。不使用LOW LEVEL 和EVENT API的话则类似DOM处理XML的方式。
http://poi.apache.org/hssf/how-to.html#event_api
下一步POI的主要日程:
你好像确实没有弄明白LZ的问题,excel就算有行数限制,装个百八十万行数据应该没有问题,香港有个上市公司用Excel做ERP呢。用jxl我试过20多列数据,Xmx开到1g,不到20w行就溢出了,而且是一个线程,POI十万行就over了。
LZ的问题,用JDBC-ODBC bridge应该也是可以的,只是比较土。
baidu 到一个
http://zhidao.baidu.com/question/8374118.html?fr=qrl
这些计算机X级考试的问题,怎么会没被我们考虑到。。。
但是由于长时间没有接触jxl了 对他的新版本不是很了解,
不知道能不能实现我下面的几个需求, 还请大家多帮个忙.
在生成excel时, jxl 的做法是在内存中构造出一个xls文件的对象
然后在最后write时生成最终的excel文件.
也就是说,在把excel所有的数据全部准备完毕(加入到那个xls的对象中) 之前,
这个超大对象一直是在jvm的内存中的, 这就导致大批量数据,如 100列10万行, 根本无法生成 OOM了.
我想问的就是, jxl是否支持生成若干个小的xls文件, 然后合并的功能(基于磁盘的合并, 而不是全部读入内存 在合并,这种合并还是要占用大量甚至更多的内存的,对于解决我的问题毫无帮助)
或者是 能不能让它在最终生成excel文件之前, 就把一部分内容写入磁盘的临时文件中,从而保证对内存的占用量一直维持在比较低的水平?
如果都不支持, 那么我想问一下 ,大家是怎么导出超大数据量的excel的?
P.S.: 哪位英语好 能不能帮我把我的问题反馈给 jxl的作者呢?
我觉得从技术角度来讲 我的那两个需求应该是完全能都实现的.
评论
25 楼
Wisdom7
2008-08-12
如果用POI的话,直接用流读取生成的EXCEL后转成WORKBOOK,就可以合并了
24 楼
fins
2008-08-12
如何把这些文件合并成一个文件呢?
因为客户的需求 是希望在一个文件里 便于打印
因为客户的需求 是希望在一个文件里 便于打印
23 楼
seemoon
2008-08-12
可以分批生成xls文件,如有100w数据,生成20个xls文件,每个文件5w条记录,并且对每个文件的文件名作number索引,然后zip并且下载。
22 楼
ciyuanlong
2008-08-06
虽然有行数限制(65535),但是那是一个sheet的数量,我曾经写过14w多,分sheet,是在hp530服务器上,jvm开的很大,但是超过这个数量就不行了,内存不够了
21 楼
Wisdom7
2008-08-05
我用JXLS,只做过生成过几百个SHEET,每SHEET有500个CELL左右,没对JVM调过优。
因为要生成封面和封底,当时的做法是先用模板生成多个WORKBOOK后再合并的,不过JXLS又是基于POI而已
因为要生成封面和封底,当时的做法是先用模板生成多个WORKBOOK后再合并的,不过JXLS又是基于POI而已
20 楼
fins
2008-08-03
excel2007没有这个限制
而且 excel的老版本的限制也只是 每个sheet页最多255列 65525行
一个excel是可以有多个sheet页的
而且 excel的老版本的限制也只是 每个sheet页最多255列 65525行
一个excel是可以有多个sheet页的
19 楼
xxboy
2008-08-03
好像excel最多也就是支持6w行数据吧
18 楼
hetylei
2008-08-02
呵呵 发现论坛小BUG
点击回复表情图标
和
生成插入的代码都是
前面某楼回复的变成了
正好小刺激某人一下
点击回复表情图标
和
生成插入的代码都是
: ? :
前面某楼回复的变成了
正好小刺激某人一下
17 楼
cats_tiger
2008-08-02
llade 写道
nihongye 写道
看了poi的源码,读取excel,有一个基于事件流的机制,能保持很小的内存占用,参照XLS2CSVmra这个例子。
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
nihongye说的目前可能是POI处理大数据量excel的正道,类似SAX处理XML的方式。不使用LOW LEVEL 和EVENT API的话则类似DOM处理XML的方式。
http://poi.apache.org/hssf/how-to.html#event_api
下一步POI的主要日程:
引用
What's Next?
Further effort on HSSF is going to focus on the following major areas:
Performance: POI currently uses a lot of memory for large sheets.
Charts: This is a hard problem, with very little documentation.
Further effort on HSSF is going to focus on the following major areas:
Performance: POI currently uses a lot of memory for large sheets.
Charts: This is a hard problem, with very little documentation.
哇,POI出新版本了,看来的确是正道。
16 楼
llade
2008-08-02
nihongye 写道
看了poi的源码,读取excel,有一个基于事件流的机制,能保持很小的内存占用,参照XLS2CSVmra这个例子。
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
nihongye说的目前可能是POI处理大数据量excel的正道,类似SAX处理XML的方式。不使用LOW LEVEL 和EVENT API的话则类似DOM处理XML的方式。
http://poi.apache.org/hssf/how-to.html#event_api
下一步POI的主要日程:
引用
What's Next?
Further effort on HSSF is going to focus on the following major areas:
Performance: POI currently uses a lot of memory for large sheets.
Charts: This is a hard problem, with very little documentation.
Further effort on HSSF is going to focus on the following major areas:
Performance: POI currently uses a lot of memory for large sheets.
Charts: This is a hard problem, with very little documentation.
15 楼
cats_tiger
2008-08-02
hetylei 写道
呵呵
我只是提示了一下excel有行限制的问题,因为做一个这样的应用,不光要考虑实现的问题,还要考虑到外部环境。excel有行限制 jxl就是再做缓存再高效生成的excel文件用excel打不开那也是白搭(另外 你还不考虑客户excel版本兼容性问题,难道用你的产品要强制装某一个版本的excel?jxl可没这样干)
PS:如果不考虑导入的格式/行列限制,可以直接导出到像csv等excel支持的文本格式,改个文件名就行。
引用
这个超大对象一直是在jvm的内存中的, 这就导致大批量数据,如 100列10万行
我只是提示了一下excel有行限制的问题,因为做一个这样的应用,不光要考虑实现的问题,还要考虑到外部环境。excel有行限制 jxl就是再做缓存再高效生成的excel文件用excel打不开那也是白搭(另外 你还不考虑客户excel版本兼容性问题,难道用你的产品要强制装某一个版本的excel?jxl可没这样干)
PS:如果不考虑导入的格式/行列限制,可以直接导出到像csv等excel支持的文本格式,改个文件名就行。
你好像确实没有弄明白LZ的问题,excel就算有行数限制,装个百八十万行数据应该没有问题,香港有个上市公司用Excel做ERP呢。用jxl我试过20多列数据,Xmx开到1g,不到20w行就溢出了,而且是一个线程,POI十万行就over了。
LZ的问题,用JDBC-ODBC bridge应该也是可以的,只是比较土。
14 楼
cats_tiger
2008-08-02
同样的问题我也遇到过,POI和JXL都有溢出,JXL还好些。我觉得除非自己研究Excel的格式(MS有公布),或者用JINI调用OLE(不能跨平台了),否则只有增大JVM内存了。
实际的项目中,我们引导客户,让他们缩小范围(比如先查询再导出)。十几万行数据导出是没有意义的。
哦,还有一个办法,就是导出txt格式,用TAB分开,这样也可以用Excel打开。
另外,如果ExtremeTable或ECSide结合Hibernate做导出,还没等jxl溢出,Hibernate就完了,因为MaxResults设置的太大了。可以修改XslView,用hibernate的scroll方式导出,这样也能增大溢出的上限,但是不能从根本上解决问题。
实际的项目中,我们引导客户,让他们缩小范围(比如先查询再导出)。十几万行数据导出是没有意义的。
哦,还有一个办法,就是导出txt格式,用TAB分开,这样也可以用Excel打开。
另外,如果ExtremeTable或ECSide结合Hibernate做导出,还没等jxl溢出,Hibernate就完了,因为MaxResults设置的太大了。可以修改XslView,用hibernate的scroll方式导出,这样也能增大溢出的上限,但是不能从根本上解决问题。
13 楼
hetylei
2008-08-02
呵呵
我只是提示了一下excel有行限制的问题,因为做一个这样的应用,不光要考虑实现的问题,还要考虑到外部环境。excel有行限制 jxl就是再做缓存再高效生成的excel文件用excel打不开那也是白搭(另外 你还不考虑客户excel版本兼容性问题,难道用你的产品要强制装某一个版本的excel?jxl可没这样干)
PS:如果不考虑导入的格式/行列限制,可以直接导出到像csv等excel支持的文本格式,改个文件名就行。
引用
这个超大对象一直是在jvm的内存中的, 这就导致大批量数据,如 100列10万行
我只是提示了一下excel有行限制的问题,因为做一个这样的应用,不光要考虑实现的问题,还要考虑到外部环境。excel有行限制 jxl就是再做缓存再高效生成的excel文件用excel打不开那也是白搭(另外 你还不考虑客户excel版本兼容性问题,难道用你的产品要强制装某一个版本的excel?jxl可没这样干)
PS:如果不考虑导入的格式/行列限制,可以直接导出到像csv等excel支持的文本格式,改个文件名就行。
12 楼
fins
2008-08-01
我以前的客户要求
每个sheet 1万条 多个sheet
每个sheet 1万条 多个sheet
11 楼
peream
2008-08-01
以前也碰到类似问题,几十万级别的,后来说服客户将记录导成多个文件再打成个zip包提供下载。关注一下大家的解决办法
10 楼
fins
2008-08-01
很幸运 2007限制的行号已经能够使导出操作产生大量的oom了
hetylei
你看问题的视角太窄了 让我想起了高中时的我 总是抓住一个字眼不放,
让对问题的讨论变成了"抬杠"或者是"转牛角尖"
这篇文章的核心思想是:
如何避免导出"含有大量数据的excel文件时" 系统发生内存溢出
而不是在讨论 excel导出行数的问题
即使我只导出1000行,列数很多 每个单元格的数据量很大,而且机器的内存小,
那么也很容易产生 OOM的问题.
hetylei
你看问题的视角太窄了 让我想起了高中时的我 总是抓住一个字眼不放,
让对问题的讨论变成了"抬杠"或者是"转牛角尖"
这篇文章的核心思想是:
如何避免导出"含有大量数据的excel文件时" 系统发生内存溢出
而不是在讨论 excel导出行数的问题
即使我只导出1000行,列数很多 每个单元格的数据量很大,而且机器的内存小,
那么也很容易产生 OOM的问题.
9 楼
hetylei
2008-08-01
很不幸 excel2007 依然有行数限制
8 楼
nihongye
2008-07-31
看了poi的源码,读取excel,有一个基于事件流的机制,能保持很小的内存占用,参照XLS2CSVmra这个例子。
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
写入上,sheet的序列化过程简单的调用各个Record的序列化方法。那么直接创建record,不经过sheet,然后直接调用record的序列化方法,便能控制在很小的内存占用:)
7 楼
fins
2008-07-31
你是来告诉我 世界上没有excel 2007的吗
谢谢了
谢谢了
6 楼
hetylei
2008-07-31
baidu 到一个
http://zhidao.baidu.com/question/8374118.html?fr=qrl
这些计算机X级考试的问题,怎么会没被我们考虑到。。。
发表评论
-
一个商业公司如果要支持一个开源项目的话,它需要做哪些工作啊?
2009-12-07 16:55 4853一个商业公司如果要支持一个开源项目的话,它需要做哪些工作呢? ... -
如何让jxl (jexcelapi) 支持更多的数据
2009-01-08 23:52 4472jxl (jexcelapi) 一直是我比较喜欢的 java版 ... -
在java中"模拟" XMLHttpRequest
2008-11-03 12:17 12952这里所说的"模拟" 是指 : 在java中 ... -
利用google docs进行"轻量级过程管理".
2008-08-28 13:21 0利用google docs进行" ... -
不错的国产开源免费的php框架: FleaPHP
2008-07-28 01:58 8452之前用他开发过一个小的网站 开发过程非常轻松愉快 体验也很好 ... -
GT-FrontController, 一个简陋的MVC控制器的设计思路
2008-07-06 23:53 2674在给GT-Grid做前后台结合的例子时, 为了"快速 ... -
h2database 普及系列一: 简介
2008-05-06 19:10 22035这不是一个新东西,但是 ... -
JSF 与 "我的伟大发明" ---- 关于B/S UI开发的胡言乱语
2008-04-10 14:25 14240这篇帖子后面的回复和 ... -
初看JSF后的胡言乱语
2008-04-10 09:31 4539最近看了一点jsf ---- 只 ... -
Help,如何在J2EE环境下使用Sqlite以及如何将sqlite打入war包
2008-03-27 09:46 3725需求是这样的 希望j2ee应用(基于应用 而不是整个服务器) ... -
请记住: i AM SoLiD. (关于View的事件触发顺序)
2007-11-16 04:11 2567View 提供了若干事件. 在渲染 布局 展现 相关事件的触 ... -
Android SDK下, 如何在程序中输出日志 以及如何查看日志.
2007-11-15 22:38 9785Android SDK下, 如何在程序中输出日志 以及如何查看 ... -
小胖加入Android Fans的 大军了 呵呵
2007-11-15 13:30 3087决定开始研究 Android 了. 以前研究过 j2me 对 ... -
老帖: findbugs简介
2007-11-02 10:09 3544这个时候说 findbugs ??? ... -
世上没有B/S系统,只有B系统和S系统.
2007-09-12 13:45 34161先说些与标题貌似无关的话. 随着prototype DWR ... -
[求助]有没有哪个缓存组件支持 基于访问频率的清理策略
2007-08-29 18:30 2374目前缓存清理策略几乎都是基于 存活期 和 活跃期 还有缓存队列 ... -
[发布2007-08-06]Ajax向导组件 WebWizard Component Beta1
2007-08-06 15:55 4954/****************************** ... -
寻求一个eclipse下更好的snippet插件(或代码模板管理插件 或代码生成器)
2007-07-26 11:12 4213eclipse自带一个snippet插件,但是功能有限. 只支 ... -
让Struts 1焕发青春----小议对Struts的改造.
2007-06-25 15:27 7541目前流行的新型的MVC框架 几乎都在"增强单元测试能 ... -
JProfiler与tomcat整合的视频演示
2007-06-20 12:16 8647这类东西看官方文档 或者google都能有答案 但是我最近为 ...
相关推荐
jxl数据导入导出jxl数据导入导出jxl数据导入导出 jxl数据导入导出jxl数据导入导出jxl数据导入导出
jxl 导出Excel 支持大数据量导出 导出数据量大 速度也快
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
jxl java excel export jxl数据导出,完整代码附带jar
jxl模版生成excel,采用类似EL表达式的方式生成模版
利用JXL技术支持模板和非模板的表格导出
java利用jxl生成excel文件,代码直接导入就可以跑(修改自己的生成的ecxel地址)
绝对不会让你失望。自己找了好多帮助才实现的哦,希望对你有帮助。互相学习
poi jxl 生成EXCEL 报表 POI 用的JAR poi-3.6-20091214.jar jxl 用到的jar jxl-2.6.jar
jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...
jxl导入导出excel 详细的描述了如何使用jxl导入导出excel。
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
封装了一个简单易用、通用、动态的从数据库导出到Excel的方法,可以动态的指定导出那些列,显示什么名字,按什么顺序显示;支持本地文件存储和JSP/Servlet文件下载。
java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
Excel导入导出 jxl及Poi 工具类:jxl 实现 及 Poi实现 非常实用
使用jxl生成excel的通用方法,参数List<?>数据,LinkedHashMap,String>实体类属性名和中文列名的键值对
jxl导出excel加水印 WritableWorkbook、WritableSheet、WritableCellFormat
jxl模板导出相关包
使用jxl.jar,创建Excel并写入数据,读取Excel数据,将数据表迁徙到Excel
jxl读取合并单元格