引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
EasyExcel解析Excel有同步和异步两种方式,这里只说异步
Model实体
public class ExcelMode extends BaseRowModel {
/**
* 第一列的数据
*/
@ExcelProperty(index = 0)
private BigDecimal column1;
/**
* 第二列的数据
*/
@ExcelProperty(index = 1)
private BigDecimal column2;
public BigDecimal getColumn1() {
return column1;
}
public void setColumn1(BigDecimal column1) {
this.column1 = column1;
}
public BigDecimal getColumn2() {
return column2;
}
public void setColumn2(BigDecimal column2) {
this.column2 = column2;
}
@Override
public String toString() {
return "ExcelMode{" +
"column1='" + column1 + '\'' +
", column2='" + column2 + '\'' +
'}';
}
监听器
public class ExcelModelListener extends AnalysisEventListener<Object> {
// 业务执行类
private SaveService saveService;
// 数据载体
ArrayList<Object> data = new ArrayList<>();
public ExcelModelListener(SaveService saveService) {
this.saveService = saveService;
}
// 每解析一行调用一次
@Override
public void invoke(Object o, AnalysisContext analysisContext) {
System.out.println(o.toString());
data.add(o);
}
//解析完毕后调用
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("解析完成");
// 执行具体添加逻辑
saveService.save(data);
}
}
抽出执行添加逻辑的接口
public interface SaveService {
// 只有一个添加方法
public boolean save(Object obj);
}
模拟不同业务添加
业务一
/**
* 实现添加业务接口
*/
public class UserSaveService implements SaveService {
@Override
public boolean save(Object o) {
// 添加逻辑
System.out.println("one");
return true;
}
}
业务二
public class TeacherSaveService implements SaveService {
@Override
public boolean save(Object obj) {
// 业务二 添加逻辑
System.out.println("TWO");
return false;
}
}
测试
@RequestMapping(value = "/demo")
@ResponseBody
public String demo(MultipartFile file){
try {
InputStream inputStream = file.getInputStream();
// ExcelMode --> EasyExcel扫描的Model对象
Sheet sheet = new Sheet(1,1, ExcelMode.class);
// 执行解析操作,在我们自己的监听类构造中传入具体的执行添加的service
EasyExcelFactory.readBySax(inputStream,sheet,new ExcelModelListener(new UserSaveService()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
return "success";
}