SpringBoot整合EasyExcel
1.Excel导入导出的应用场景
在做项目中很多时候都会用到Excel的导入和导出
2.解决方案
- POI:操作比较繁琐
- EasyExcel:正如其名,'Easy'Excel相对于POI使用起来还是比较简单的
3.EasyExcel使用步骤
创建一个简单的Maven项目
导入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
01_lesson_address
com.qbb.lesson
1.0-SNAPSHOT
../01_lesson_address/pom.xml
4.0.0
com.qbb
alibaba_excel
com.alibaba
easyexcel
2.1.7
org.slf4j
slf4j-simple
1.7.5
org.apache.xmlbeans
xmlbeans
3.1.0
org.projectlombok
lombok
1.18.10
junit
junit
4.12
创建一个实体类
package com.qbb.alibaba.excel.entity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import lombok.Data;
import java.util.Date;
/**
* @author QiuQiu&LL
* @create 2021-07-07 23:27
* @Description:
*/
@Data
public class ExcelStudentData {
@ExcelProperty(value = "姓名",index = 1)
private String name;
@DateTimeFormat("yyyy年MM月dd日 HH时mm分ss秒")
@ExcelProperty(value = "生日",index = 2)
private Date birthday;
@NumberFormat("#.##%")
@ExcelProperty(value = "薪资",index = 3)
private Double salary;
/**
* 忽略这个字段
*/
@ExcelIgnore
private String password;
}
穿件一个监听器listener
package com.qbb.alibaba.excel.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* @author QiuQiu&LL
* @create 2021-07-08 0:15
* @Description:
*/
@Slf4j
public class ExcelStudentDataListener extends AnalysisEventListener {
private static final int TEMP = 500;
private List list = new ArrayList<>();
@Override
public void invoke(ExcelStudentData excelStudentData, AnalysisContext analysisContext) {
log.info("解析到每一条数据" + excelStudentData);
list.add(excelStudentData);
if (list.size() >= TEMP) {
// TODO 存入数据库
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("收尾工作" + analysisContext);
}
}
读excel
package com.qbb.alibaba.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import com.qbb.alibaba.excel.listener.ExcelStudentDataListener;
import org.junit.Test;
/**
* @author QiuQiu&LL
* @create 2021-07-08 0:16
* @Description:
*/
public class ExcelReadTest {
@Test
public void simpleRead07() {
String filename = "G:/excel/01-simpleWrite-07.xlsx";
EasyExcel.read(filename, ExcelStudentData.class, new ExcelStudentDataListener()).excelType(ExcelTypeEnum.XLSX)
.sheet().doRead();
}
}
写excel
package com.qbb.alibaba.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.qbb.alibaba.excel.entity.ExcelStudentData;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author QiuQiu&LL
* @create 2021-07-07 23:29
* @Description:
*/
public class ExcelWriteTest {
/**
* 最简单的写
*/
@Test
public void simpleWrite07() {
String fileName = "G:/excel/01-simpleWrite-07.xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, ExcelStudentData.class).sheet("模板").doWrite(data());
}
@Test
public void simpleWrite03() {
String fileName = "G:/excel/01-simpleWrite-03.xls";
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, ExcelStudentData.class).excelType(ExcelTypeEnum.XLS).sheet("模板").doWrite(data());
}
private List data(){
List list = new ArrayList<>();
//算上标题,做多可写65536行
//超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
for (int i = 0; i < 655; i++) {
ExcelStudentData data = new ExcelStudentData();
data.setName("QiuQiu&LL" + i);
data.setBirthday(new Date());
data.setSalary(0.56);
data.setPassword("123"); //即使设置也不会被导出
list.add(data);
}
return list;
}
}
简单的excel读写,大家可以参考上面的代码,或者参考官方EsayExcel