- 浏览: 2611995 次
- 性别:
- 来自: 小胖儿的大城
文章分类
最新评论
-
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 4959一个商业公司如果要支持一个开源项目的话,它需要做哪些工作呢? ... -
如何让jxl (jexcelapi) 支持更多的数据
2009-01-08 23:52 4520jxl (jexcelapi) 一直是我比较喜欢的 java版 ... -
在java中"模拟" XMLHttpRequest
2008-11-03 12:17 13098这里所说的"模拟" 是指 : 在java中 ... -
利用google docs进行"轻量级过程管理".
2008-08-28 13:21 0利用google docs进行" ... -
不错的国产开源免费的php框架: FleaPHP
2008-07-28 01:58 8521之前用他开发过一个小的网站 开发过程非常轻松愉快 体验也很好 ... -
GT-FrontController, 一个简陋的MVC控制器的设计思路
2008-07-06 23:53 2734在给GT-Grid做前后台结合的例子时, 为了"快速 ... -
h2database 普及系列一: 简介
2008-05-06 19:10 22124这不是一个新东西,但是 ... -
JSF 与 "我的伟大发明" ---- 关于B/S UI开发的胡言乱语
2008-04-10 14:25 14484这篇帖子后面的回复和 ... -
初看JSF后的胡言乱语
2008-04-10 09:31 4584最近看了一点jsf ---- 只 ... -
Help,如何在J2EE环境下使用Sqlite以及如何将sqlite打入war包
2008-03-27 09:46 3792需求是这样的 希望j2ee应用(基于应用 而不是整个服务器) ... -
请记住: i AM SoLiD. (关于View的事件触发顺序)
2007-11-16 04:11 2631View 提供了若干事件. 在渲染 布局 展现 相关事件的触 ... -
Android SDK下, 如何在程序中输出日志 以及如何查看日志.
2007-11-15 22:38 9846Android SDK下, 如何在程序中输出日志 以及如何查看 ... -
小胖加入Android Fans的 大军了 呵呵
2007-11-15 13:30 3147决定开始研究 Android 了. 以前研究过 j2me 对 ... -
老帖: findbugs简介
2007-11-02 10:09 3568这个时候说 findbugs ??? ... -
世上没有B/S系统,只有B系统和S系统.
2007-09-12 13:45 34368先说些与标题貌似无关的话. 随着prototype DWR ... -
[求助]有没有哪个缓存组件支持 基于访问频率的清理策略
2007-08-29 18:30 2408目前缓存清理策略几乎都是基于 存活期 和 活跃期 还有缓存队列 ... -
[发布2007-08-06]Ajax向导组件 WebWizard Component Beta1
2007-08-06 15:55 5000/****************************** ... -
寻求一个eclipse下更好的snippet插件(或代码模板管理插件 或代码生成器)
2007-07-26 11:12 4262eclipse自带一个snippet插件,但是功能有限. 只支 ... -
让Struts 1焕发青春----小议对Struts的改造.
2007-06-25 15:27 7604目前流行的新型的MVC框架 几乎都在"增强单元测试能 ... -
JProfiler与tomcat整合的视频演示
2007-06-20 12:16 8700这类东西看官方文档 或者google都能有答案 但是我最近为 ...
相关推荐
在Java开发中,导出大数据量到Excel是一个常见的需求,特别是在数据分析、报表生成或数据交换等场景。"jxl"库是一个广泛使用的Java库,它允许开发者方便地读取和写入Excel文件。本篇文章将深入探讨如何使用jxl库实现...
jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...
在"jxl导出数据"这个主题中,我们主要关注如何利用JXL库来导出数据到Excel格式,这对于数据处理、报告生成或者数据分析场景尤其有用。下面我们将深入探讨JXL库的使用方法、核心概念以及导出数据的步骤。 首先,JXL...
在IT行业中,数据导出是一项常见的任务,尤其是在数据分析、报表生成和数据共享的场景下。JXL库是一个Java库,专门用于读写Microsoft Excel文件,它为开发者提供了一种便捷的方式来处理Excel数据,无需依赖Microsoft...
JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可读取Excel数据并转换为Java对象。 **描述解析:** 描述中提到的"采用类似EL表达式的方式...
在Java编程环境中,导出Excel数据是一项常见的任务,特别是在数据处理、报表生成或者数据分析的应用中。JXL库是一个广泛使用的开源库,它提供了方便的方式来读取、写入和操作Excel文件。下面我们将深入探讨如何使用...
在Java开发中,导出数据到Excel是常见的需求,特别是在处理大量结构化数据时,如报表或数据分析。JXL库提供了一个简洁的API,使得这个过程变得简单。首先,你需要在项目中引入JXL库的依赖,通常通过Maven或Gradle来...
- 如果数据量大,考虑分批写入或使用更高效的写入策略,以避免一次性加载大量数据导致内存压力。 通过以上解析,我们可以看到JXL库在处理数据导入导出时的灵活性和实用性,它简化了Java程序与Excel文件交互的过程...
在IT领域,数据导入导出是一项基础且重要的任务,特别是在数据分析、报表生成和数据库管理中。本主题聚焦于使用Java库jxl进行XLS(Excel)文件的操作,包括创建、写入数据以及读取Excel文件内容。下面我们将深入探讨...
Java使用JXL库生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出时。JXL是一个开源的Java库,允许我们读取、写入和修改Excel文件。以下将详细讲解如何使用JXL库来生成Excel文件。 首先,我们需要在...
导出时,从数据库获取数据,生成Excel文件。 为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中的示例代码。通过阅读和运行这些代码,你可以更深入地了解如何在实际项目中...
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
然而,当需要大量生成或导出Excel文件时,直接使用Excel软件可能效率低下。此时,开发者通常会借助编程语言来实现自动化操作,Java中就有两个常用的库,即JXL和Apache POI,用于读写Excel文件。下面我们将详细探讨这...
6. **性能优化**:在处理大量数据时,jxl.jar提供了流式处理模式,允许开发者按需读取或写入数据,避免一次性加载整个文件到内存,从而提高性能。 7. **示例代码**:在提供的链接...
在IT行业中,生成Excel表格是常见的数据处理任务,特别是在数据导入导出、报表生成和数据分析等领域。本资源提供了一个利用jxl库实现Java程序中生成Excel表格的解决方案。jxl是一个广泛使用的开源Java库,它允许...
3. **高性能**:尽管POI比JXL更重量级,但其性能优秀,尤其在处理大数据量时。 ### 实现Excel导入导出 无论是JXL还是Apache POI,实现Excel导入导出的基本步骤相似: 1. **读取Excel**:创建工作簿对象,打开指定...
总之,Java通过JXL库导出XLS文件是一种常见的数据导出方式,适合于各种业务场景,例如数据分析、报表生成等。这个压缩包可能包含了完成这一任务所需的全部代码和库,对于初学者来说是一个很好的学习资源,同时对于...
本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `jxl`库提供了一套完整的API来操作Excel文件,包括创建新的工作簿、添加...
在Java编程领域,导出Excel数据是一项常见的任务,特别是在数据处理和报表生成中。`jxl`库是一个广泛使用的开源库,它允许开发者方便地读取和写入Microsoft Excel文件。本文将详细介绍如何使用`jxl`库创建一个导出...
利用JXL技术支持模板和非模板的表格导出