对导入的excel进行判断是否正确

需求

在一次导入项目中,对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了

猜你喜欢

转载自blog.csdn.net/m0_37701381/article/details/80736751
今日推荐