EasyExcel Maven 使用指南
EasyExcel 是阿里巴巴开源的一个基于 Java 的简单、省内存的读写 Excel 的开源项目。它支持读取和写入 Excel 文件,并且具有高性能、低内存占用的特点。EasyExcel 非常适合处理大数据量的 Excel 文件,尤其是在内存有限的环境中。本文将详细介绍如何使用 Maven 引入 EasyExcel,并展示如何通过 EasyExcel 进行 Excel 文件的读写操作。
首先,我们需要在 Maven 项目中引入 EasyExcel 的依赖。打开项目的 pom.xml
文件,添加以下依赖:
<dependencies>
<!-- EasyExcel 核心依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<!-- 可选:如果需要使用 Lombok 简化代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<!-- 可选:如果需要使用 Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
</dependencies>
在读取或写入 Excel 文件时,通常需要定义一个与 Excel 表格结构对应的实体类。假设我们要处理一个包含用户信息的 Excel 文件,表格结构如下:
姓名 | 年龄 | 邮箱 |
---|---|---|
张三 | 25 | zhangsan@example.com |
李四 | 30 | lisi@example.com |
我们可以定义一个 User
类来表示这个结构:
import com.alibaba.excel.annotation.ExcelProperty;
public class User {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("邮箱")
private String email;
// Getters and 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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
接下来,我们展示如何使用 EasyExcel 读取 Excel 文件中的数据。假设我们有一个名为 users.xlsx
的文件,内容与上面提到的表格结构一致。
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ReadListener;
import java.util.ArrayList;
import java.util.List;
public class ExcelReader {
public static void main(String[] args) {
String fileName = "users.xlsx";
List<User> userList = new ArrayList<>();
// 读取 Excel 文件
EasyExcel.read(fileName, User.class, new ReadListener<User>() {
@Override
public void invoke(User user, AnalysisContext context) {
userList.add(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("数据读取完成");
}
}).sheet().doRead();
// 打印读取到的数据
for (User user : userList) {
System.out.println(user.getName() + ", " + user.getAge() + ", " + user.getEmail());
}
}
}
在上面的代码中,我们使用 EasyExcel.read
方法读取 Excel 文件。User.class
指定了要将数据映射到的实体类。ReadListener
是一个回调接口,invoke
方法会在每次读取一行数据时被调用,doAfterAllAnalysed
方法在所有数据读取完成后被调用。
除了读取 Excel 文件,EasyExcel 还可以用于将数据写入 Excel 文件。假设我们有一个 List<User>
,我们想将这些数据写入一个名为 output.xlsx
的文件中。
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class ExcelWriter {
public static void main(String[] args) {
String fileName = "output.xlsx";
List<User> userList = new ArrayList<>();
// 添加一些测试数据
userList.add(new User("张三", 25, "zhangsan@example.com"));
userList.add(new User("李四", 30, "lisi@example.com"));
// 写入 Excel 文件
EasyExcel.write(fileName, User.class).sheet("用户信息").doWrite(userList);
System.out.println("数据写入完成");
}
}
在这个例子中,我们使用 EasyExcel.write
方法将 List<User>
中的数据写入 Excel 文件。User.class
指定了数据的结构,sheet
方法指定了工作表的名称,doWrite
方法执行写入操作。
EasyExcel 的一个主要优势是它能够处理大数据量的 Excel 文件,而不会导致内存溢出。为了实现这一点,EasyExcel 使用了流式读写的方式,即逐行读取或写入数据,而不是一次性将整个文件加载到内存中。
例如,在读取大数据量的 Excel 文件时,我们仍然可以使用 ReadListener
接口,但需要注意在处理每一行数据时尽量减少内存占用:
EasyExcel.read(fileName, User.class, new ReadListener<User>() {
@Override
public void invoke(User user, AnalysisContext context) {
// 处理每一行数据,例如直接写入数据库或进行其他操作
processUser(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("数据读取完成");
}
}).sheet().doRead();
EasyExcel 还支持自定义 Excel 文件的样式,例如设置单元格的字体、颜色、边框等。我们可以通过实现 WriteHandler
接口来自定义样式:
import com.alibaba.excel.write.handler.WriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
public class CustomStyleHandler implements WriteHandler {
@Override
public void beforeSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) {}
@Override
public void afterSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) {
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
font.setColor(IndexedColors.RED.getIndex());
cellStyle.setFont(font);
// 设置*行的样式
Sheet sheet = writeSheetHolder.getSheet();
Row row = sheet.getRow(0);
for (Cell cell : row) {
cell.setCellStyle(cellStyle);
}
}
}
在写入 Excel 文件时,我们可以通过 write
方法的 registerWriteHandler
方法来注册自定义的样式处理器:
EasyExcel.write(fileName, User.class)
.registerWriteHandler(new CustomStyleHandler())
.sheet("用户信息")
.doWrite(userList);
EasyExcel 是一个功能强大且易于使用的 Excel 读写工具,特别适合处理大数据量的 Excel 文件。通过 Maven 引入 EasyExcel 依赖后,我们可以轻松地读取和写入 Excel 文件,并且可以自定义 Excel 的样式。希望本文的介绍能够帮助你快速上手 EasyExcel,并在实际项目中应用它。
扩展阅读
通过本文的学习,你应该能够掌握如何使用 EasyExcel 进行 Excel 文件的读写操作,并能够在实际项目中应用这些技能。如果你有更多的需求或问题,可以参考 EasyExcel 的官方文档或社区资源,获取更多的帮助。