当前接口能实现得功能:
1、对excel 得表头信息进行校验,规范表头
2、数据是一行一行读取,可以对每一行数据进行逻辑操作和筛选
@PostMapping("/upload")
@ApiOperation(value = "导入表格")
@Transactional
public ResultEntity upload(MultipartFile file) throws IOException {
// 1、读取表中数据
List<ExcelApplicationDto> list = new ArrayList<>();
EasyExcel.read(file.getInputStream(), ExcelApplicationDto.class, new AnalysisEventListener<ExcelApplicationDto>() {
// 读取并验证表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
List<String> headList = new ArrayList<>();
for (Integer i : headMap.keySet()) {
headList.add(headMap.get(i));
}
if(!headList.get(0).equals("应用系统名称")){
throw new RequestDataException("上传文件不符合导入模板要求,请重新上传");
}
if(!headList.get(1).equals("所属部门")){
throw new RequestDataException("上传文件不符合导入模板要求,请重新上传");
}
if(!headList.get(2).equals("对外IP地址")){
throw new RequestDataException("上传文件不符合导入模板要求,请重新上传");
}
}
// 每读取一行就调用该方法
@Override
public void invoke(ExcelApplicationDto data, AnalysisContext context) {
list.add(data);
}
// 全部读取完成就调用该方法
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成");
}
}).sheet().doRead();
list.forEach(System.out::println);
if (list.size() <=0) return ResultResponse.success("数据为空"); // 表里没数据直接返
dataService. saveBatch(list);
return ResultResponse.success();
}