1、引入依赖
com.alibaba
easyexcel
2.2.10
compile
2、写接口(因为我这里要获取文件名中的信息,所以有file.getOriginalFilename)
/**
* 导入
* @return
*/
@PostMapping("/import")
public Map import(@RequestParam(value = "file", required = true) MultipartFile file) throws IOException {
Map result =null;
String originalFilename = file.getOriginalFilename();
String fileName = originalFilename.substring(0, originalFilename.indexOf("."));
result = planSscMatchService.importSscflow(file.getInputStream(),fileName);
return result;
}
3、新建导入文件的实体类
/**
* 流水表格实体
*/
@Data
public class SsccFlowImport {
/**
* 第一列的数据
*/
@ExcelProperty(value = "交易时间",index = 0)
@JsonFormat(pattern = "yyyy-MM-dd")
private Date entrydate;
/**
* 第二列的数据
*/
@ExcelProperty(value = "对方户名",index = 1)
private String partnername;
/**
* 第三列的数据
*/
@ExcelProperty(value = "对方账号",index = 2)
private String partneraccount;
/**
* 第四列的数据
*/
@ExcelProperty(value = "收入金额",index = 3)
private Integer inflow;
/**
* 第五列的数据
*/
@ExcelProperty(value = "支出金额",index = 4)
private Integer outflow;
/**
* 第六列的数据
*/
@ExcelProperty(value = "账户余额",index = 5)
private Integer balance;
/**
* 第七列的数据
*/
@ExcelProperty(value = "摘要",index = 6)
private String describe;
}
4、新建一个表格的监听器
@Slf4j
public class DataEasyExcelListener extends AnalysisEventListener {
private List list = new ArrayList<>();
@Override
public void invoke(Object data, AnalysisContext analysisContext) {
log.info("解析到一条数据:{}", data);
list.add((T) data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("所有数据解析完成!");
}
public List getData() {
return list;
}
}
5、导入文件(最关键的就是EasyExcel.read()方法)
@Override
@Transactional
public Map importSscflow(InputStream io, String name) {
Map resultMap = new HashMap();
DataEasyExcelListener listener = new DataEasyExcelListener<>();
EasyExcel.read(io, SsccFlowImport.class, listener).sheet(0).doRead();
List data = listener.getData();
//保存数据
sscFlowMapper.batchImportInsert(data);
}
resultMap.put("successNum", data.size());
return resultMap;
}