Controller
public GbmResult batchReadFile(@RequestParam(required = false,name ="file") MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); if (!(suffixName.equals(".xlsx"))) { System.out.println("请上传xlsx格式文件"); } Listener listener = new Listener (TestService); EasyExcel.read(file.getInputStream(),MgbsupplierBatchDto.class,listener).sheet().doRead(); return Listener .getResult(); }
MgbsupplierBatchDto.class 导入Excel的类
监视器
@Slf4j public class Listener extends AnalysisEventListener<TestDto> { List<TestDto> list = new ArrayList<TestDto>(); //这是需要做业务的service private TestService testService; private Map<String,Object> map = new HashMap<String,Object>(){ { put("success",0); put("message",""); } }; public Map<String,Object> getResult(){ return this.map; } public Listener(TestService testService){ this.testService= testService; } @Override public void invoke(MgbsupplierBatchDto mgbsupplierBatchDto, AnalysisContext analysisContext) { //有什么判断都可以在这里做 list.add(mgbsupplierBatchDto); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { //读取完excel,最后执行这里 this.map=testService.readBatch(list,map); } }
//过来excel的空行
private static boolean isAllNull(MgbsupplierBatchDto t) { for (Method method : methods) { if (method.getName().contains("get") && method.getParameterCount() == 0) { if(!StringUtils.contains(method.getName(),"getCellStyleMap")&&!StringUtils.contains(method.getName(),"getClass") ){ Object invoke = null; try { invoke = method.invoke(t); } catch (IllegalAccessException e) { log.error(e.toString(),e); } catch (InvocationTargetException e) { log.error(e.toString(),e); } if (ToolUtil.isNotEmpty(invoke)) { return false; } } } } return true; }