EasyExcel 是阿里巴巴开源的一个基于 Java 的 Excel 处理库,它以高效、简单易用著称。相比于传统的 Apache POI 等工具,EasyExcel 通过流式读取和写入大大降低了内存占用,非常适合处理大文件。本文将从零开始学习 EasyExcel,并一步步构建你的第一个应用。
在开始之前,请确保你已经安装了以下环境:
在 pom.xml
文件中添加 EasyExcel 的 Maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version> <!-- 版本号请根据实际情况调整 -->
</dependency>
创建一个简单的 Maven 项目,包含以下目录结构:
src/main/java/com/example/easyexcel/
EasyExcel 需要一个与 Excel 表格对应的实体类。假设我们要处理一个员工信息表,包含姓名、年龄和职位字段。
创建一个名为 Employee.java
的类:
package com.example.easyexcel;
import com.alibaba.excel.annotation.ExcelProperty;
public class Employee {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("职位")
private String position;
// Getters 和 Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", position='" + position + '\'' +
'}';
}
}
创建一个名为 ExcelWriter.java
的类,用于将数据写入 Excel 文件:
package com.example.easyexcel;
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class ExcelWriter {
public static void main(String[] args) {
// 设置输出文件路径
String fileName = "employees.xlsx";
// 准备数据
List<Employee> data = new ArrayList<>();
data.add(new Employee("张三", 28, "开发工程师"));
data.add(new Employee("李四", 30, "产品经理"));
data.add(new Employee("王五", 25, "测试工程师"));
// 写入 Excel
EasyExcel.write(fileName, Employee.class).sheet("员工信息").doWrite(data);
System.out.println("写入完成!");
}
}
运行上述代码后,会在项目的根目录生成一个名为 employees.xlsx
的文件,其中包含员工信息。
创建一个名为 ExcelReader.java
的类,用于读取 Excel 文件中的数据:
package com.example.easyexcel;
import com.alibaba.excel.EasyExcel;
import java.util.List;
public class ExcelReader {
public static void main(String[] args) {
// 设置输入文件路径
String fileName = "employees.xlsx";
// 读取 Excel
List<Employee> employeeList = EasyExcel.read(fileName)
.head(Employee.class)
.sheet()
.doReadSync();
// 打印结果
for (Employee employee : employeeList) {
System.out.println(employee);
}
}
}
运行上述代码后,程序会读取 employees.xlsx
文件中的数据并打印到控制台。
当处理大数据量时,使用默认的同步读取方式可能会导致内存溢出。EasyExcel 提供了分批读取的功能。
修改 ExcelReader.java
中的代码如下:
package com.example.easyexcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
public class ExcelReaderWithBatch {
public static void main(String[] args) {
String fileName = "employees.xlsx";
EasyExcel.read(fileName, Employee.class, new AnalysisEventListener<Employee>() {
@Override
public void invoke(Employee employee, AnalysisContext analysisContext) {
System.out.println("解析到一条数据: " + employee);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("所有数据解析完成!");
}
}).sheet().doRead();
}
}
上述代码通过监听器的方式逐条解析数据,避免一次性加载所有数据到内存中。
通过本文的学习,我们掌握了 EasyExcel 的基本使用方法,包括:
EasyExcel 的强大之处在于其简洁的 API 和高效的性能,尤其适合需要频繁处理 Excel 文件的场景。