欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

导出Excel (POI&JXL对比)

程序员文章站 2022-07-12 23:51:39
...

转载自:https://blog.csdn.net/u010166206/article/details/47002883

1.各自的用法

POI:

HSSFWorkbook:     HSSFWorkbook workbook = new HSSFWorkbook(); 
HSSFSheet: HSSFSheet sheet = workbook.createSheet("Title");
HSSFRow :   HSSFRow row = sheet.createRow(0);
HSSFCell: HSSFCell cell = row.createCell(i);
HSSFRichTextString: HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text);
OutputStream out = new FileOutputStream("C://Users//dell//Desktop//a.xls"); 
workbook.write(out);
out.close(); 


JXL:
WritableWorkbook: WritableWorkbook book = Workbook.createWorkbook(new File("C:\\Users\\dell\\Desktop\\测试.xls"));
WritableSheet: WritableSheet sheet = book.createSheet("第一页", 0);
Label lable = new Label(0,0,"test");
sheet.addCell(lable);

book.write();

2.区别

数据读取用POI,只要不涉及单元格样式的写入使用jxl效率高点。
POI读取效率高,但是大数据量写入Excel效率比jxl慢。以下为前人总结:

自从 MS 公开了 OFFICE 的编码格式以来,很多开源的组织都提供了对 Excel 支持读写操作的插件包。Java 世界里,Apache应该算是开源世界中的领头羊。他的Jakarta Project 中的 POI Project 就提供了对OFFICE的完美支持(不过最近好像他对Word的支持项目已经停止,而且公开在网站上圈人呢 ^^ ,如果你对Word文件的编码格式非常熟悉,可以发封邮件哦!)。

JXL ,Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。


Jakarta 的 POI Project 与 Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。如果你的软件是跟财务有相当的关系的话,建议采用 POI Project,如果用不到计算公式,而且很可能需要导出图片,可选择JXL 。

就这两者的区别,主要谈下JVM虚拟机内存消耗的情况. 
数据量3000条数据,每条60列.JVM虚拟机内存大小64M. 
使用POI:运行到2800条左右就报内存溢出. 
使用JXL:3000条全部出来,并且内存还有21M的空间. 
可想而知,在对内存的消耗方面差距还是挺大的. 
也许是由于JXL在对资源回收利用方面做的还挺不错的. 
关于两者效率方面,没有研究过,我想这个也是基于大数据量而言的,数据量小的话基本上差别不大,也不难被发觉.但是大的数据量,POI消耗的JVM内存远比JXL消耗的多.但相比提供的功能的话,JXL又相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel. 

对excel的基本操作 
jxl:最基本的excel api 

poi:也是基本api,读取2M文件的时候没有jxl效率高,优点是能保持Excel里原有的宏(但不能用它写新的宏)。

依赖包

<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.10</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.6</version>
</dependency>

相关标签: Java