这俩天处理 华夏ERP 进行二次开发项目,分别接触了实现 excel 导入导出功能依赖库 poieasyexceljxl

其中 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

关于 jxlpoi 两者的联系与不同点,可以阅读 What is the better API to Reading Excel sheets in java - JXL or Apache POI

讲一下我的理解,之前看有的教程说 jxl 不支持导入 excel 操作,这显然是错误的。jxl 可以实现对于 excel 的读取和写入功能,并且是根据行号、列号读取每一个单元格内容的。上面的一个关于 jxlpoi 比较的文章里提到 jxl 不支持 xlsx 格式的读取:Java JXL does not support the Excel 2007+ ".xlsx" format,这一点没测试过,但应该是对的。另外 jxlmaven 中央库显示 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