EasyPoi库
- 1. 环境准备
- 2. 快速入门
- 2.1 导出Excel
- 2.2 导入Excel
- 3. 进阶使用
- 3.1 自定义样式
- 3.2 复杂的数据映射
- 3.3 数据校验
- 4. 性能优化
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("学生信息", "学生");// 导出ExcelList<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 {@Overridepublic 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;}
}