注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

大数据量导出Excel的方案 POI、JXL、FastExcel比较  

2012-12-11 18:11:11|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

总的来说,两种方法:服务器端生成和浏览器端生成。

服务器端生成就是:根据用户请求,获取相应的数据,使用poi/jxl, jacob/jawin+excel,或是用数据拼html的table或是cvs纯文本的数据格式等。然后按.xls或是.cvs格式的文件的形式返回给用户,指定Content-Type:application/vnd.ms-excel ,浏览器就会提示要下载的文件是excel文件。

poi/jxl, jacob/jawin生成的是excel的biff格式。html/csv的是文本格式,不另存为excel文件,很多excel功能是用不了的。jacob/jawin需要服务器端是windows系统,且安装了excel2000以上版本。poi/jxl和html/csv方式的话,服务器端可以跨平台。


试共同条件: 
数据总数为110011条,每条数据条数为19个字段。 

一、POI、JXL、FastExcel比较 
POI、JXL、FastExcel均为java第三方开源导出Excel的开源项目。 

导出方案一:一次性全部导出到一个Excel文件中。 
实际情况均报OutOfMemery错误,以下数据为报OutOfMemery数据时,数据到的最大数据数目,如表1所示: 
表1:报OutOfMemery错误时所能处理的数据量 
FastExecl POI JXL 
10000数据/sheet 37465 28996 42270 
5000数据/sheet 39096 31487 46270 
3000数据/sheet 39000 32493 47860 

小结: 
多分sheet能一定程度上减少内存的使用,但是均因为程序中创建的Cell(即为Excel中的一个单元格)无法释放,消耗大量内存,导致OutOfMemery错误;JXL表现最好,创建Cell内存使用较少。 

导出方案二:先分多个Excel文件将数据全部导出,然后对多个Excel文件进行合并。 
首先,测试将全部数据导出所用的时间,如表2所示,数据均测试三次取平均。 
表2:导出全部数据所用时间 

FastExecl POI JXL 
10000数据/文件 68s 33s 30s 
5000数据/文件 68s 32s 33s 
3000数据/文件 59s 33s 39s 

小结: 
均成功导出Excel文件,原因是导出一个Excel文件,释放所占用的创建Cell的内存。 
FastExecl表现最差,POI表现稳定,JXL随着数据的增大,速度一定程度上增快。 

然后,进行整合,由于将多Excel合并成一个Excel文件的功能只有POI所有,故使用POI测试,结果如表3所示。 
注:数据量大合并还会报OutOfMemery错误,故合并总数据量以5万为准。 
表3:合并5万数据所用时间 
时间 
10000数据/文件 11s 
5000数据/文件 11s 
3000数据/文件 11s 

小结: 
使用POI对文件进行合并速度较快,但有数据量的限制。 


总结:方案二比较可行,但是数据量有限制,为5万条。 


二、导出XML 的电子表格 
导出的格式类似为纯文本,能实现大数据量的存储,并能实现分Sheet查看,且能添加简单的样式,符合项目要求。经实际测试Excel2003和Excel2007均能识别并正常打开查看。使用时间测试如表4所示,数据均测试3次取平均。 
表4:生成全部数据所用时间 
时间 
10000数据/sheet 28.0秒 
20000数据/sheet 30.1秒 
30000数据/sheet 28.1秒 
40000数据/sheet 26.5秒 
50000数据/shee 28.2秒 
55000数据/sheet 26.8秒 
59000数据/sheet 30.1秒 
59500数据/sheet 发生假死机现象 
60000数据/sheet 发生假死机现象 


但是导出的数据为XML不是纯正的Excel文件,如使用Excel文件的xls后缀保存,打开文件会弹出警告,但不影响阅读。 
且经实际测试,在Access2007和Access2003中可通过导入外部数据的方式,将导出的XML导入进Access数据库。 

三、总结 
项目要求是大数据量导出Excel文件,POI、JXL、FastExcel不能完全满足要求;使用XML 的电子表格导出实现了大数据量导出,但是格式为XML不是纯正的Excel文件,为曲线救国。两种导出形式的比较,如表5所示。 
表5:合并5万数据所用时间 
POI、JXL、FastExcel XML 的电子表格 
导出数据格式 为纯Execl文件 为XML文件 
导出数据量 小 较大 
能否分Sheet 能 能 
能否添加样式 能 能 
能否添加图片 POI 能 不能 
导出数据能否导入Access 能 能 
  评论这张
 
阅读(2552)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016