在使用easypoi过程中,如果excel的单元格被编辑之后,会导致在解析的时候,读出空数据。容易产生空白数据入库。
public JsonResult importExcel(@RequestParam("file") MultipartFile file) {
try {
importParams params = new importParams();
// 表头设置为1行
params.setHeadRows(1);
//重点是这一行用于
params.setVerifyHandler(verifyHandler);
List 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{ @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 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了以后有需要再继续补充;



