EasyExcel
是阿里巴巴开发的一个高性能的 Java Excel 处理库,主要用于处理大规模的 Excel 文件。它特别注重性能,优化了内存消耗,适合处理大数据量的 Excel 文件,避免了传统 Excel 库在处理大文件时的性能瓶颈。
主要功能
-
高性能:
- 流式读取:支持基于流的读取方式(SAX 解析),减少内存消耗,适合处理大数据量的 Excel 文件。
- 高效写入:通过逐行写入的方式,优化写入性能,避免将所有数据一次性加载到内存中。
-
简化操作:
- 提供了简洁的 API,用于读取和写入 Excel 文件,减少了繁琐的配置和操作步骤。
-
支持多种格式:
- 支持
.xlsx
文件格式(即 Excel 2007 及更高版本),不支持.xls
文件格式(即 Excel 2003 及以下版本)。
- 支持
主要类和方法
1. EasyExcel
EasyExcel
类是库的核心类,提供了静态方法用于创建读取器和写入器。它的常用方法包括:
-
读取 Excel 文件:
EasyExcel.read(String fileName, Class<?> pojoClass, ReadListener<?> readListener)
fileName
:Excel 文件的路径。pojoClass
:映射 Excel 数据的 POJO 类。readListener
:用于接收读取的数据的监听器。
示例:
EasyExcel.read("file.xlsx", MyClass.class, new PageReadListener<MyClass>(dataList -> { for (MyClass data : dataList) { System.out.println(data); } })).sheet().doRead();
-
写入 Excel 文件:
EasyExcel.write(String fileName, Class<?> pojoClass).sheet(String sheetName).doWrite(List<?> data)
fileName
:Excel 文件的路径。pojoClass
:写入数据的类型。sheetName
:工作表名称。data
:要写入的数据列表。
示例:
List<MyClass> dataList = getDataList(); // 获取数据列表 EasyExcel.write("output.xlsx", MyClass.class) .sheet("Sheet1") .doWrite(dataList);
2. ReadListener
ReadListener
是一个接口,用于处理读取的 Excel 数据。PageReadListener
是其常用的实现,用于逐页读取数据并处理。
public class MyReadListener extends PageReadListener<MyClass> {
public MyReadListener() {
super(dataList -> {
for (MyClass data : dataList) {
// 处理读取的数据
}
});
}
}
3. WriteHandler
WriteHandler
是一个接口,用于处理写入 Excel 时的各种操作,如自定义单元格样式、写入事件等。
示例代码
以下是一个简单的示例,展示如何使用 EasyExcel
进行 Excel 文件的读取和写入操作:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.WriteSheetBuilder;
import java.util.List;
public class EasyExcelExample {
public static void main(String[] args) {
// 读取 Excel 文件
EasyExcel.read("file.xlsx", MyClass.class, new PageReadListener<MyClass>(dataList -> {
for (MyClass data : dataList) {
System.out.println(data);
}
})).sheet().doRead();
// 写入 Excel 文件
List<MyClass> dataList = getDataList(); // 获取数据列表
EasyExcel.write("output.xlsx", MyClass.class)
.sheet("Sheet1")
.doWrite(dataList);
}
private static List<MyClass> getDataList() {
// Generate or fetch data
return List.of(new MyClass("example", 123));
}
}
总结
EasyExcel
是一个高效且易于使用的 Excel 处理库,特别适用于大数据量的场景。它通过流式处理和高效的 API 简化了 Excel 文件的读取和写入操作,提高了性能,适合用于企业级应用和大数据处理任务。