试共同条件:
数据总数为110011条,每条数据条数为19个字段。
电脑配置为:P4 2.67GHz,1G内存。
一、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 |
能 |
能 |
分享到:
相关推荐
5. **JAVA报表工具**:常见的Java报表工具有JasperReports、BIRT(Business Intelligence and Reporting Tools)、iReport等。这些工具提供了设计、预览和导出报表的功能,支持多种数据源,并能与各种Java应用程序...
- **简介**:JasperReports是一款基于Java的开源报表工具,它能够在Java环境下像其他集成开发环境(IDE)中的报表工具那样来制作报表。JasperReports支持多种文件输出格式,包括PDF、HTML、XLS、CSV和XML等,这使得它...
在Java环境下,报表工具通常分为两类:纯Java报表工具和支持Java的报表工具。 **支持Java的报表工具**: 这类工具并非完全由Java编写,但可以在Java应用程序中调用。它们主要包括两种类型:一是采用独立报表服务器...
Java报表工具打印方案集锦主要关注的是在Java环境中如何实现Web报表的打印功能。随着B/S架构的普及,报表在网页浏览器中展示,但由于浏览器自身的打印功能局限性,报表工具通常需要提供自己的打印解决方案。目前,...
Java水晶报表开发技术是Java应用程序中用于生成、展示和打印数据报表的重要工具。水晶报表(Crystal Reports)由SAP公司开发,它允许开发者利用各种数据源,如数据库、XML文件或Excel表格,创建复杂的报表和统计图表...
水晶报表(Crystal Reports)是由SAP公司开发的一款强大的报表工具,它能够帮助开发者整合数据源,设计美观的报表,并支持导出多种格式,如PDF、Excel、HTML等。在Java环境下,我们通常通过Java API来与水晶报表进行...
### Java报表工具详解 #### 一、Grid++Report 报表工具简介 Grid++Report是一款高性能的报表组件,尤其适用于管理信息系统(如ERP、进销存、财务等)的报表开发。该工具提供了强大的数据展示能力和报表设计能力,...
Java报表解决方案源码是针对企业级应用中数据报表生成与展示的一个重要工具,它通常包含一系列的类库、API和示例代码,帮助开发者在Java平台上实现复杂的数据处理和报表设计。在J2EE环境中,这类解决方案对于数据...
总之,Java制作报表涉及多个层面,从选择合适的报表库到设计模板,再到数据处理和集成,每个步骤都需要开发者具备扎实的Java基础和良好的业务理解能力。通过深入学习和实践,开发者可以创建出满足需求的高质量报表...
### Java报表工具开发详细手册:JasperReport与iReport #### 一、引言 Java报表工具开发详细手册,主要围绕JasperReport和iReport展开,深入探讨了这两个工具的安装、基本操作以及高级功能。JasperReport作为一款...
- JasperReports:广泛应用的报表工具,支持多种数据源,可以生成PDF、HTML、Excel等多种格式的报表。 - BIRT(Business Intelligence and Reporting Tools):基于Eclipse的开源报表系统,适合大型企业级应用。 ...
使用这个工具包,开发者可以在Java环境中轻松地处理Excel转图片的需求,无需依赖第三方应用或服务,提高了开发效率和项目的自给自足性。同时,纯Java实现保证了跨平台的兼容性,可以在各种Java运行环境中稳定工作。
综上所述,这个“JAVA报表源码”包可能涵盖了从数据库交互、数据处理到报表呈现的整个流程,对于想要学习或改进报表系统的人来说,是一个宝贵的资源。通过深入理解和研究这些源码,开发者可以提升自己的Java技能,...
快逸报表是面向软件开发人员的、高性价比、易学易用的JAVA报表工具软件。快逸报表提供了高效的报表设计方案、强大的报表展现能力、灵活的部署机制,并且具备强有力的填报功能,为中小规模用户的数据统计分析、展现...
在IT领域,特别是软件开发行业中,报表生成是一项常见的需求,特别是在企业级应用中,...通过上述步骤,开发者可以利用Java的强大功能和报表工具的灵活性,有效地实现百灵报表的生成,满足企业的数据分析和展示需求。
FreeReportBuilder是一个Java报表工具,可以与任何数据库正常工作,只需要有一个JDBC驱动程序。能够和各种数据库工作。 5. JMagallanes JMagallanes是一个开源的使用Java/J2EE开发的Olap和动态报表应用程序。...
总之,"数字转汉字表达出来"是通过编程解决的一个实际问题,尤其在处理报表和财务数据时非常有用。在Java中,这涉及到字符串处理、数字逻辑和汉字编码等基础知识。对于初学者来说,理解和实现这样的功能可以帮助提高...
这些类可能封装了对Java Print Service API的调用,或者使用了JasperReport库来处理报表生成。导入这些源码后,开发者可以直接在自己的项目中使用,节省了大量开发时间。 5. **报表设计原理**:报表设计通常包含...
本文将深入探讨如何使用Java实现报表的生成,结合提供的参考项目,我们将探讨相关的技术和工具。 首先,Java报表生成通常涉及到几个关键概念: 1. **JDBC(Java Database Connectivity)**:作为Java访问数据库的...