EasyPoi 是一个用于处理 Excel 文件的 Java 库,它简化了 Excel 文件的读写操作,尤其适合用于导出大量数据或者复杂的表格格式。它基于Apache POI,但通过简化代码和提供更高级的功能,使得Excel读写变得更加快捷和高效。
1. 环境准备
首先需要在 Maven 项目中引入 EasyPoi 的依赖。打开 pom.xml
文件,添加以下依赖:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-excel</artifactId>
<version>4.1.0</version>
</dependency>
2. 快速入门
2.1 导出Excel
创建一个简单的 POJO 类(如 Student
),然后使用 EasyPoi 将其列表导出为 Excel 文件。
public class Student {
private String name;
private int age;
// Getters and Setters
}
导出方法:
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import java.util.List;
public class ExcelExport {
public static void export(List<Student> students) {
// 设置导出Excel的标题和sheet名
ExportParams exportParams = new ExportParams("学生信息", "学生");
// 导出Excel
List<List<String>> data = students.stream()
.map(student -> Arrays.asList(student.getName(), student.getAge() + ""))
.collect(Collectors.toList());
HSSFWorkbook wb = ExcelExportUtil.exportExcel(exportParams, String.class, data);
// 输出到前端或者保存到文件
}
}
2.2 导入Excel
导入 Excel 文件并将其转换成 Student
对象列表。
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
public class ExcelImport {
public static List<Student> importExcel(MultipartFile file) throws Exception {
ImportParams params = new ImportParams();
List<Student> students = ExcelImportUtil.importExcel(file.getInputStream(), Student.class, params);
return students;
}
}
3. 进阶使用
3.1 自定义样式
使用 EasyPoi 自定义 Excel 文件的样式,包括但不限于字体、背景色和边框。
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
// 创建样式
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 应用样式
ExportParams exportParams = new ExportParams("学生信息", "学生");
exportParams.setStyle(style);
HSSFWorkbook wb = ExcelExportUtil.exportExcel(exportParams, String.class, data);
3.2 复杂的数据映射
当 Excel 文件中的列和 Java 对象的属性不完全匹配时,可以使用注解来指定映射关系。
import cn.afterturn.easypoi.excel.annotation.Excel;
public class Student {
@Excel(name = "姓名")
private String name;
@Excel(name = "年龄", orderNum = "1")
private int age;
// Getters and Setters
}
3.3 数据校验
在导入数据时,可以设置验证规则来确保数据的准确性。
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandlerResult;
@ExcelTarget("student")
public class Student implements IExcelDataModel {
@Excel(name = "姓名")
private String name;
@Excel(name = "年龄", orderNum = "1", needVerify = true, verifyHandler = AgeVerifyHandler.class)
private int age;
public static class AgeVerifyHandler implements IExcelVerifyHandler {
@Override
public boolean verify(IExcelVerifyHandlerResult result) {
return result.getInt() > 0 && result.getInt() <= 100;
}
}
// Getters and Setters
}
4. 性能优化
对于大数据量的导出,可以使用 EasyPoi 提供的分页导出功能来提高性能。
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.result.ExcelExportResult;
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
public class ExcelExport {
public static ExcelExportResult exportLargeData(IExcelDataHandler<Student> handler) {
ExportParams exportParams = new ExportParams("学生信息", "学生");
ExcelExportResult result = ExcelExportUtil.exportExcelByPage(exportParams, Student.class, handler);
return result;
}
}