Java 处理 Excel 导入导出功能的依赖库 jxl、poi、easyexcel 简述
这俩天处理 华夏ERP
进行二次开发项目,分别接触了实现 excel
导入导出功能依赖库 poi
、easyexcel
和 jxl
。
其中 jxl
是 华夏ERP
包含的依赖库,已经实现了导入、导出方法的封装,可以下载项目源码参考,也可以参考网上教程 jxl导入/导出Excel(Maven)、JExcel API – Reading and Writing Excel file in Java。
poi
是当前使用比较主流 excel 操作依赖库,ruoyi
项目中使用的就是,可以下载项目源码参考,也可以参考官网教程 POI-HSSF and POI-XSSF/SXSSF - Java API To Access Microsoft Excel Format Files。
关于 jxl
与 poi
两者的联系与不同点,可以阅读 What is the better API to Reading Excel sheets in java - JXL or Apache POI。
讲一下我的理解,之前看有的教程说 jxl
不支持导入 excel 操作,这显然是错误的。jxl
可以实现对于 excel
的读取和写入功能,并且是根据行号、列号读取每一个单元格内容的。上面的一个关于 jxl
与 poi
比较的文章里提到 jxl
不支持 xlsx
格式的读取:Java JXL does not support the Excel 2007+ ".xlsx" format
,这一点没测试过,但应该是对的。另外 jxl
的 maven
中央库显示 Last Release on May 6, 2011
,表示 jxl
依赖库已经十几年没更新了,并且最新的 2.6.12
版本 Vulnerabilities
里显示依赖存在很多的漏洞。所以如果不是项目里已经封装好了 jxl
类库,最好是使用 poi
或者 easyexcel
。
easyexcel 是我在误以为 jxl
不具备读取 excel
文件功能时引入使用的。以下是官方文档里的介绍:
EasyExcel
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便
即 easyexcel
是对 poi
的一个封装,maven 库的依赖关系:easyexcel
> easyexcel-core
> poi-ooxml
。
使用上与 poi
相同的点就是需要对读取的 class
做属性注解,只不过 poi
需要自定义注解,而 easyexcel
封装了需要用到的 ExcelProperty
注解。前者自定义也有好处,比如 ruoyi
里定义了 readConverterExp
读取内容转表达式 (如: 0=男,1=女,2=未知),可以比较方便的处理一些状态的自动识别转化;而后者支持属性上或全局添加一个 converter 转换器,也可以自定义转化。
另外 easyexcel
需要定义一个监听器 listener
来处理批次读取和存储操作。批次读取和存储这个特性可以有效降低在读取 Excel 很大,达到几百 M 甚至更大的数据量时需要使用的内存。
综上,如果不是项目里已经引入了 excel
的操作库(jxl
或者 poi
)的情况,建议一步到位,直接使用 easyexcel
。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。