读取Excel中的内容,并将筛选后的内容导出
1、导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
2、创建用来导入的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentImport {
// 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据
@ExcelProperty("学生名称")
private String name;
@ExcelProperty("学生年龄")
private Integer age;
}
3、创建用来筛选后进行导出的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
// 设置列宽
@ColumnWidth(25)
// 设置表头行高
@HeadRowHeight(20)
public class StudentReport {
@ExcelProperty("学生名称")
private String name;
@ExcelProperty("学生年龄")
private Integer age;
@ExcelProperty("错误信息")
private String msg;
}
4、创建测试类
public static void main(String[] args) {
// 读操作,模板是E:\\template.xlsx,使用StudentImport类接收值,创建excel一行一行的回调监听器
EasyExcel.read("E:\\template.xlsx", StudentImport.class, new PageReadListener<StudentImport>((stu)->{
ArrayList<StudentReport> list = new ArrayList<>();
// 进行简单的条件筛选后放入上方list中
stu.stream().forEach(studentImport -> {
if(studentImport.getAge() > 21){
StudentReport report = new StudentReport();
BeanUtils.copyProperties(studentImport,report);
report.setMsg("年龄大于21");
list.add(report);
}else{
StudentReport report = new StudentReport();
BeanUtils.copyProperties(studentImport,report);
report.setMsg("年龄正常");
list.add(report);
}
});
// 在回调中进行写操作,使用StudentReport类来将list中的值写入到E:\template-write.xlsx
EasyExcel.write("E:\\template-write.xlsx",StudentReport.class).sheet().doWrite(list);
}
)).sheet().doRead();
}
本文中只是对EasyExcel的简单的读操作进行举例,EasyExcel中还有填充等操作,若想了解更多请移至官方文档进行查看。
点击链接跳转至: EasyExecl 官方文档