EasyExcel 解析多个Excel 存入数据库
引入依赖
<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"; }
上一篇:
Python 安装包管理工具 pip
下一篇:
开发以及辅助工具(持续更新中)