在平时的业务系统开发中,经常需要用到导入、导出Excel的功能,本文介绍了一款非常好用的工具EasyPoi,EasyPoi方便我们编写excel和word的模板导入和导出,是对poi的封装的一个工具类,可以让不懂导入导出的我们快速使用poi完成Excel和word的各种操作。
EasyPoi中的Excel自适应xls和xlsx两种格式。
功能介绍:
1.Excel导入
注解导入Map导入
大数据量导入sax模式导入文件保存
文件校验字段校验
2.Excel导出
注解导出
模板导出
html导出
基于注解的导入导出,修改注解就可以修改Excel。
支持常用的样式自定义。
基于map可以灵活定义的表头字段。
支持模板的导出,一些常见的标签,自定义标签。
支持HTML/Excel转换。
支持word的导出,支持图片,Excel。
EasyPoi的使用
1.easypoi 父包
2.easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理
3.easypoi-base 导入导出的工具包,可以完成Excel导入,导出,Word的导出,Excel的导出功能
4.easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
Spring Boot 2.x版本以上项目的依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.1.0</version>
</dependency>
Excel导入导出
注解有5个类分别是
@Excel 作用到filed上面,是对Excel一列的一个描述。
@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示。
@ExcelEntity 表示一个继续深入导出的实体,但没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段。
@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导出。
@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理。
Excel导入
导入实体类例子:
@Excel(name = "编号")
private String id;
@Excel(name = "姓名",width = 10)
private String name;
@Excel(name = "年龄",replace = {"10岁_10","11岁_11"})
private Integer age;
@Excel(name = "生日",exportFormat = "yyyy-MM-dd",width = 16)
private Date birthday;
导入的基本代码:
@Test
public void test() {
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
long start = new Date().getTime();
List<MsgClient> list = ExcelImportUtil.importExcel(
new File(PoiPublicUtil.getWebRootPath("import/ExcelExportMsgClient.xlsx")),
MsgClient.class, params);
System.out.println(new Date().getTime() - start);
System.out.println(list.size());
System.out.println(ReflectionToStringBuilder.toString(list.get(0)));
}
ImportParams这个类是用于设置导入参数的。
Excel导入校验:
对象上加上通用或者自定义校验规则,然后
params.setNeedVerfiy(true);
配置校验即可。
Excel导出
导出实体类例子:
//id
private String id;
//学生姓名
@Excel(name = "学生姓名", height = 20, width = 30, isImportField = "true_st")
private String name;
//学生性别
@Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st")
private int sex;
@Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isImportField = "true_st", width = 20)
private Date birthday;
@Excel(name = "进校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")
private Date registrationDate;
设置4列分别是 学生姓名,学生性别,出生日期,进校日期,其中学生姓名定义了列高,学生性别存在数据库是数字,需要转换,两个日期都进行了格式化输出。
生成Excel代码如下:
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("计算机一班学生","学生"), StudentEntity.class, list);
参考文献:http://easypoi.mydoc.io/