需求
在一次导入项目中,对excel进行一个判断,不能什么excel都能导入,这样容易导致后台报错,前端做对是否是excel文件进行过滤,那后台就进行excel文件内容的校验,来判断是不是所属excel,下面用Java来举个例子。
实现
首先要把excel解析出来,每一行为一个List,同时又被一个最大的List包裹,我以我的项目为例,大家参考,因为我觉得每一行一个list好操作
List<List<String>> list = ExportUtil.importExcel(multipartFile.getInputStream(),
multipartFile.getOriginalFilename(),
fieldConfigs.size());
这样之后,想取出表格头部标题就方便了
List<String> row = list.get(0);
amazing,进入正题,由于项目中用户要提前选择好要导入的字段有哪些,会被保存到数据库中,所以我的思路是查询出用户选择好的和表格里的做对比,如果对不上,那就不是正确的excel,有人会说了,为什么不根据导出的excel名称进行对比,我也想啊,可是这样太限制用户了,我们要让用户名称随便改都没事,只要是本来的excel,这样用户体验才好
List<String> row = list.get(0);
boolean flag;
List<EdTemplateField> fields = edTemplateFieldMapper.findByTemplate(templateId);
for (EdTemplateField field : fields) {
flag = false;
for (String excelField : row) {
if(field.getName().equals(excelField)){
flag = true;
break;
}
}
if(!flag){
return ResponseMsgUtil.failure("所导入的excel不属于该模板,请重新导入!");
}
}
if(list.size() <= 1){
return ResponseMsgUtil.failure("请勿导入没有数据的excel");
}
思路很简单,这样就实现了对excel的基础判断,防止数组越界,所以第一层循环是数据库查出来的用户所选择的字段,这个时候立flag为false
,好第二次进来还走循环,第二层循环才是标题长度,然后进行比较,相同就为true
,全部循环结束,就可以判断是不是正确的excel了