`
zhanghe086
  • 浏览: 55568 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
试共同条件:
数据总数为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 能 能

提高JVM的大小几乎没效果……
分享到:
评论
2 楼 羽翼的心动 2017-01-06  
POI代码是在服务器端执行的,直接操作处理的是服务器端的文件,耗费服务器资源,并且需要处理文档的并发问题。
POI处理的格式单一,无法导出格式比较复杂的表格。
POI不能使用模板进行导入,导出。
POI的代码非常复杂。
推荐楼主使用PageOffice产品,导入导出word,excel都很方便,代码非常少。PageOffice还可以在线编辑保存动态填充word,excel文档呢。
1 楼 nb125 2012-08-07  
大神,用些xml 的方式 能不能找到sheet页 在后追加

相关推荐

    Excel导入导出 jxl及Poi 工具类

    为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中的示例代码。通过阅读和运行这些代码,你可以更深入地了解如何在实际项目中应用jxl和Apache POI。 总的来说,jxl和Apache ...

    Excel生成导出JXL和POI两种方式小demo

    提供的压缩包文件"excel导出"可能包含了使用JXL和POI生成Excel的示例代码,通过查看这些代码,你可以更好地理解如何在实际项目中应用这两个库。 总结来说,JXL和Apache POI都是Java中用于处理Excel的强大工具,各...

    JXL、POI实现Excel导入导出

    3. **高性能**:尽管POI比JXL更重量级,但其性能优秀,尤其在处理大数据量时。 ### 实现Excel导入导出 无论是JXL还是Apache POI,实现Excel导入导出的基本步骤相似: 1. **读取Excel**:创建工作簿对象,打开指定...

    POI和JXL两种方式导出EXCEL

    在Java开发中,导出Excel文件是常见的需求,主要用于数据报表、数据分析等场景。本话题将探讨使用Apache POI和JExcelApi(JXL)两个库来实现这一功能。这两种库都是Java中广泛使用的处理Microsoft Office文件格式的...

    poi jxl 生成EXCEL 报表

    - POI支持更多Excel特性,如图表、透视表、复杂公式等,而JXL相对简单,更适合轻量级操作。 - POI的API稍显复杂,但功能更全面;JXL的API设计更加直观,学习曲线较平缓。 4. **实际应用**: 当你需要生成包含...

    java操作excel——jxl和poi比较

    在Java编程领域,处理Excel文件是一项常见的任务,用于数据导入导出、数据分析或者报表生成等。本文将对比两种主流的Java Excel处理库:jxl和Apache POI,并探讨它们的特性和适用场景。 首先,jxl是较早的Java ...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    java 导出excel(单、多工作薄)

    在处理大数据量时,POI是更好的选择。在上述代码中,开发者使用了POI库来创建多个工作簿。首先,计算所需的工作簿数量(num),基于每65000条数据创建一个新的工作簿。这样可以确保每个工作簿的行数不超过Excel的...

    java将数据导出到Excel表格(java源程序+jxl.jar包)

    以下是使用Java和jxl库将数据导出到Excel的基本步骤: 1. **导入库**:在你的Java源代码中,你需要导入jxl库的相关类。例如: ```java import jxl.*; import jxl.write.*; ``` 2. **创建Workbook对象**:...

    jxl导出excel总结

    jxl库正是解决这一问题的关键,它允许Java程序创建、读取和修改Excel文件,极大地拓展了Java在数据处理上的能力。 jxl库是由JExcelAPI项目提供的,它是一个开源的Java库,专门用于处理Microsoft Excel文件。在本文...

    jxls-poi导出excel示例代码文件

    4. **导出Excel**:最后,`jxls-poi`会生成一个新的Excel文件,其中包含了从JSON数据填充后的内容。你可以选择保存到本地或者直接通过HTTP响应发送给用户下载。 具体代码示例可能如下: ```java import org.jxls....

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格工具,常常...理解并熟练掌握这些库,将极大地提升你在处理Excel数据时的效率。在实际项目中,根据具体需求和性能考虑,可以选择适合的库进行操作。

    poi jxl 操作excel 所需jar包

    另一方面,JXL(Java Excel API)是一个轻量级的库,主要用于处理老版本的.xls文件。它提供了读取、写入和修改Excel文件的能力,但不支持.xlsx格式。JXL的优点在于它的简单易用和较小的学习曲线,对于小型项目或者对...

    poi,jxl解析excel

    - **数据导入导出**:在Web应用中,可以使用Apache POI或JXL将用户上传的Excel文件数据导入数据库,或者将数据库数据导出为Excel文件供用户下载。 - **数据分析**:通过读取Excel数据,可以进行数据清洗、统计分析...

    真香!Java 导出 Excel 表格竟变得如此简单优雅

    poi 和 jxl 对内存的消耗很大,在处理大批量的数据时,容易造成内存溢出。比如处理一个 3M 的 Excel,poi 和 jxl 可能需要上百兆的内存,但 easyexcel 可能只需要几百或几千 KB(内存消耗对比有些夸张)。在性能这...

    jxl.jar包(java导入导出Excel文件)

    在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...

    java使用JXL导入导出excel

    Java使用JXL库进行Excel导入导出是一种常见的技术实践,特别是在需要在Java应用程序或Web应用中处理Excel数据时。JXL是一个轻量级的库,它允许开发人员以纯Java方式读取、创建和修改Excel文件,而无需依赖于Windows...

    JXL使用模板通过el表达式生成excel文件

    通过JXL库和EL表达式,开发者可以快速生成动态的、格式化的Excel文件,这在数据分析、报表生成或数据导出场景中非常有用。尽管JXL库在处理现代Excel格式上可能稍显过时,但它仍然是一个实用的工具,尤其适合处理较旧...

Global site tag (gtag.js) - Google Analytics