在使用easypoi过程中,如果excel的单元格被编辑之后,会导致在解析的时候,读出空数据。容易产生空白数据入库。
public JsonResult importExcel(@RequestParam("file") MultipartFile file) {
try {
ImportParams params = new ImportParams();
// 表头设置为1行
params.setHeadRows(1);
//重点是这一行用于
params.setVerifyHandler(verifyHandler);
List<ClassVo> list = ExcelImportUtil.importExcel(file.getInputStream(), ClassVo.class, params);
if (list != null && list.size() > 0) {
boolean b = targetService.saveBatchByInport(ClwarningConvert.INSTANCE.targetToSource(list), list.size());
return b ? success() : fail();
}
} catch (Exception e) {
e.printStackTrace();
return fail("导入数据格式不正确");
}
return success();
}
主要是第五行代码:
params.setVerifyHandler(verifyHandler);
属性值是通过spring注入进来的;
@Autowired
private ClassExcelVerifyHandler verifyHandler;
verifyHandler属性值就是过滤器,具体代码如下:
@Component
public class ClassExcelVerifyHandler implements IExcelVerifyHandler<ClassDTO>{
@SneakyThrows
@Override
public ExcelVerifyHandlerResult verifyHandler(ClassDTO obj) {
ExcelVerifyHandlerResult result=new ExcelVerifyHandlerResult(true);
if (ObjectUtil.isNotNull(obj)){
//判断对象属性是否全部为空
boolean b = ObjectIsNullUitl.checkFieldAllNull(obj);
result.setSuccess(!b);
}
return result;
}
}
//也可以把范型改成Object
导出代码就很简单了;
public void exportExcel(HttpServletResponse response) throws IOException {
List<ClassVo> list = targetService.select();
response.setHeader("content-Type", "application/vnd.ms-excel");
// 下载文件的默认名称
String filename = "Excel模板" + ".xlsx";
response.setHeader("Content-Disposition", "attachment;filename=" +
URLEncoder.encode(filename, "UTF-8"));
response.setCharacterEncoding("UTF-8");
ExportParams exportParams = new ExportParams();
exportParams.setSheetName("模板");
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ClassVo.class,
ClwarningConvert.INSTANCE.sourceToTarget(list));
workbook.write(response.getOutputStream());
}
到这里就ok了以后有需要再继续补充;