Springboot +easypoi Excel数据导入数据库

依赖和前端的东西和我上一篇一样:

https://blog.csdn.net/qq_36802726/article/details/89915975

Controller: 

@Transactional(rollbackFor = Exception.class)
    @PostMapping("/importExcel")
    @ApiOperation("导入")
    @LogOperation("导入")
    public Result importExcel2(@RequestParam("file") MultipartFile file, @RequestParam Map params) {
        //excel 数据是否有异常可插入
        Boolean success = false;
        //表格数据
        List list = new ArrayList();
        Map map = new HashMap();
        map = ExcelUtils.saveAndAnalysisExcel(file, BIMConstants.ZHGL_DADJ);//返回数据源
        List daoruExcel = new ArrayList();
        daoruExcel = (List) map.get("ExcelList");
        //失败原因
        StringBuilder errorReason = new StringBuilder();
        try {
            if (daoruExcel.size() > 0) {
                //外层循环取数据集合,从第三列获取 到倒数第二行结束。根据你的表格格式来。
                int size = daoruExcel.size()-2;
                for (int i = 4; i < size ; i++) //noinspection AlibabaRemoveCommentedCode
                {
                    FysjtsygtDTO fysjtsygtDTO = new FysjtsygtDTO();
                    List dataList = (List) daoruExcel.get(i);
                    String id = UUIDHexGenerator.getUUID();
                    // 第1列 : 序号
                    String fyOrder = dataList.get(0).toString().trim();
                    // 第2列 : 企业名称
                    String fysjtQyName = dataList.get(1).toString().trim();
                    // 第3列 : 企业性质name
                    String orgXzName = dataList.get(2).toString().trim();
                    // 第4列 : 线名
                    String lineName = dataList.get(3).toString().trim();
                    // 第5列 : 起点
                    String smile = dataList.get(4).toString().trim();
                    // 第6列 : 终点
                    String emile = dataList.get(5).toString().trim();
                    // 第7列 : 省
                    String shengName = dataList.get(6).toString().trim();
                    // 第8列 : 市
                    String shiName = dataList.get(7).toString().trim();
                    // 第9列 : 县
                    String xianName = dataList.get(8).toString().trim();
                    // 第10列 : 详细地址
                    String fysjtAddress = dataList.get(9).toString().trim();
                    // 第11列 : 宗地名称
                    String zdName = dataList.get(10).toString().trim();
                    // 第12列 : 土地证号
                    String zdCode = dataList.get(11).toString().trim();
                    // 第13列 : 宗地面积
                    String zdAreaSyq = dataList.get(12).toString().trim();
                    // 第14列 : 权利人
                    String zdOwner = dataList.get(13).toString().trim();
                    // 第15列 : 土地性质
                    String zdSyqtypeName = dataList.get(14).toString().trim();
                    // 第16列 : 使用面积
                    String fysjtAreaSy = dataList.get(15).toString().trim();
                    // 第17列 : 房屋面积
                    String fysjtAreaFw = dataList.get(16).toString().trim();
                    // 第18列 : 房屋所有权人
                    String fysjtFwOwner = dataList.get(17).toString().trim();
                    // 第29列 : 备注
                    String fysjtDesc = dataList.get(18).toString().trim();

                    int spanNum = i + 1;
                    if (StringUtils.isEmpty(fysjtQyName)) {
                        errorReason.append("第" + spanNum + "行,第1列;企业名称不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(orgXzName)) {
                        errorReason.append("第" + spanNum + "行,第2列;企业性质不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(zdCode)) {
                        errorReason.append("第" + spanNum + "行,第12列;土地证号不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(shengName)) {
                        errorReason.append("第" + spanNum + "行,第7列;省不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(shiName)) {
                        errorReason.append("第" + spanNum + "行,第8列;市不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(xianName)) {
                        errorReason.append("第" + spanNum + "行,第9列;县不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(fysjtAreaSy)) {
                        errorReason.append("第" + spanNum + "行,第16列;使用土地面积不能为空!!!");
                        break;
                    }
                    if (StringUtils.isEmpty(fysjtAreaFw)) {
                        errorReason.append("第" + spanNum + "行,第17列;房屋面积不能为空!!!");
                        break;
                    }

                    //数量需判断是否为数字
                    if (!isInteger(fysjtAreaSy)) {
                        success = false;
                        errorReason.append("第" + spanNum + "行,第16列" + fysjtAreaSy + ":数据格式异常,请填写数字!!!");
                        break;
                    }
                    if (!isInteger(fysjtAreaFw)) {
                            success = false;
                            errorReason.append("第" + spanNum + "行,第17列" + fysjtAreaFw + ":数据格式异常,请填写数字!!!");
                            break;

                    }


                    fysjtsygtDTO.setId(id);
                    //对象其他的set方法省略

                  
//判断是否存在重复数据
//                    Integer ifDa = daCommonService.ifDacode(fysjtsygtDTO);
//                    if(ifDa > 0){
//                        success = false;
//                        errorReason.append("第"+i+"行第一列"+fysjtQyName+",该档案系统中已存在!!!");
//                        break;}
                    list.add(fysjtsygtDTO);
                    success = true;
                }
                //excel填报数据无异常可入库
                if (success) {
                  fysjtsygtService.saveBatchfys(list);//批量插入
                }
            }
            //无异常数据
            if (StringUtils.isEmpty(errorReason.toString())) {
                return new Result().ok("数据导入成功");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return  new Result().error(errorReason.toString());
    }
    /**
     * 利用正则表达式判断字符串是否是数字
     * @param str
     * @return
     */
    public boolean isInteger(String str){
        String z = "[0-9]*";
        Pattern pattern = Pattern.compile(z);
        Matcher isNum = pattern.matcher(str);
        if( !isNum.matches() ){
            return false;
        }
        return true;
    }

 

你可能感兴趣的:(Java)