Excel 处理
Excel Spring Boot Starter 是一个基于 Apache POI 的 Excel 处理工具库,提供了简洁易用的 Builder API 和强大的注解支持,帮助开发者快速实现 Excel 文件的读写功能。
主要特性:
- 🚀 流式处理:支持大文件的流式读取,内存占用低
- 🎯 注解驱动:通过注解定义 Excel 与 Java 对象的映射关系
- 🔧 链式 API:流畅的 Builder 模式,代码简洁优雅
- 🎨 样式支持:丰富的样式设置选项,支持注解和编程式配置
- 📊 CellSet 架构:灵活强大的单元格处理机制
- ⚡ 性能优化:针对大数据集进行了优化
依赖配置
在 pom.xml 中添加依赖:
<dependency>
<groupId>com.jeeapp</groupId>
<artifactId>excel-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
快速开始
定义实体类
使用 @FieldColumn 注解定义 Excel 列映射:
import com.jeeapp.excel.annotation.FieldColumn;
import lombok.Data;
@Data
public class User {
@FieldColumn(name = "姓名", order = 1)
private String name;
@FieldColumn(name = "年龄", order = 2)
private Integer age;
@FieldColumn(name = "邮箱", order = 3)
private String email;
@FieldColumn(name = "部门", order = 4)
private String department;
}
读取 Excel
基础读取
import com.jeeapp.excel.RowReader;
import com.jeeapp.excel.mapping.AnnotationBasedRowMapper;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@Service
public class ExcelService {
public List<User> readUsers(InputStream inputStream) throws Exception {
List<User> users = new ArrayList<>();
try (RowReader reader = RowReader.open(inputStream)) {
AnnotationBasedRowMapper<User> mapper =
new AnnotationBasedRowMapper<>(User.class);
for (Row row : reader) {
if (row.getRowNum() == 0) {
continue; // 跳过标题行
}
User user = mapper.mapRow(row);
if (user != null) {
users.add(user);
}
}
}
return users;
}
}
写入 Excel
手动创建方式
import com.jeeapp.excel.WorkbookBuilder;
import com.jeeapp.excel.SheetBuilder;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import java.io.OutputStream;
import java.util.List;
@Service
public class ExcelService {
public void writeUsers(List<User> users, OutputStream outputStream)
throws Exception {
Workbook workbook = new XSSFWorkbook();
WorkbookBuilder workbookBuilder = WorkbookBuilder.builder(workbook);
SheetBuilder sheetBuilder = workbookBuilder.createSheet("用户列表");
// 创建标题行
sheetBuilder.createRow()
.createCell("姓名")
.createCell("年龄")
.createCell("邮箱")
.createCell("部门");
// 创建数据行
for (User user : users) {
sheetBuilder.createRow()
.createCell(user.getName())
.createCell(user.getAge())
.createCell(user.getEmail())
.createCell(user.getDepartment());
}
workbook.write(outputStream);
workbook.close();
}
}
使用 populate() 方法(推荐)
使用 populate() 方法可以自动根据注解生成 Excel,代码更简洁:
import com.jeeapp.excel.WorkbookBuilder;
import com.jeeapp.excel.cellset.FieldCellSetProvider;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.OutputStream;
import java.util.List;
@Service
public class ExcelService {
public void writeUsersWithPopulate(List<User> users, OutputStream outputStream)
throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
WorkbookBuilder.builder(workbook)
.createSheet("用户列表")
// 使用 populate 自动填充数据
.populate(FieldCellSetProvider.create(User.class, users))
.build()
.write(outputStream);
workbook.close();
}
}
CellSet 架构
Excel Starter 的核心架构基于 CellSet(单元格集合)的概念,提供了灵活而强大的单元格处理机制。