第三十八,三十九 java中excel的导入

主要解决excel表格导入问题:
使用的是Poi的Jar包,所以要先导入进来。
然后是代码部分

/**
     * excel文件导入
     */
    public String execlImp(){
        
        try {
            //判断是否通过校验
            boolean flag = true;
            //打印的结果
            String result = "";
            //获取文件路径
            String fileKey = getRequest().getParameter("fileKey");
            String url = "";
            SysFile sysFile = sysFileService.getFileByKey(fileKey);
            url=sysFile.getFileSavePath();
            //获取文件名
            String name = sysFile.getFileName().substring(sysFile.getFileName().lastIndexOf(".")+1);
            //转成流
            InputStream stream = new FileInputStream(url);
            //创建excel文件
            Workbook book = createWorkBook(name, stream);
            //获取excel中具体的表 参数0,1,2表示excel左下方的表1,表2,表3
            Sheet sheet = book.getSheetAt(0);
            //用来校验重复数据的列表
            List carNum = new ArrayList();
            //遍历每行数据(i=1,从第二行开始)
            for (int i = 1;i<=sheet.getLastRowNum();i++) {
                //row表示一行
                Row row = sheet.getRow(i);
                //写了个方法,专门做校验
                int falg  = isflag(row,carNum);
                //校验结束后将第一行,第一列的数据放入做重复校验的数组
                carNum.add(row.getCell(0).toString());
                //这是对校验结果做出的反馈
                if(falg == -99) {
                    flag = false;
                    result = "导入的文件格式不正确";
                    getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_ERR);
                } else {
                    if(falg!=0){
                        flag = false;
                        switch (falg) {
                        case 99:
                            result += "第"+(i+1)+"为空
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; case 1: result += "第"+(i+1)+"行车号为空
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; case 2: result += "第"+(i+1)+"行车号表中重复
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; case 3: result += "第"+(i+1)+"行车号长度不正确
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; case -4: result += "第"+(i+1)+"行车号只能为数字
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; case 4: result += "第"+(i+1)+"行车号数据库中重复
"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_WARNING); continue; } } } } //如果校验成功,那么我们再一条条将数据插入数据库 if(flag){ for (int i = 1;i<=sheet.getLastRowNum();i++) { System.out.println(sheet.getLastRowNum()); Row row = sheet.getRow(i); OilAdvanceTrain oilAdvanceTrain = new OilAdvanceTrain(); oilAdvanceTrain.setActualTrainKey("null"); oilAdvanceTrain.setCreatePerson(user.getUserName()); oilAdvanceTrain.setCreateTime(TimeHelper.getCurrentTime()); oilAdvanceTrain.setIsFlag(Constants.IS_FLAG); oilAdvanceTrain.setTrainNo(row.getCell(0).toString()); if (row.getLastCellNum()>1) { oilAdvanceTrain.setTrainType(row.getCell(1).toString()); } oilAdvanceTrainService.saveOilAdvanceTrain(oilAdvanceTrain); } result = "导入成功!"; getRequest().getSession().setAttribute(Constants.HINT, Constants.HINT_RIGHT); } getSession().setAttribute(Constants.SESSION_OP_RESULT_MESS, result); } catch (Exception e) { // 上抛异常至页面, 用户界面提示 e.printStackTrace(); } return "success"; } public int isflag(Row row,List carnum){ int code = 0; // 默认值 0 , 校验成功则返回默认值 0 // 表格格式不正确,表格不完整 /* try { * //此处有坑 ,row.row.getLastCellNum() 是获取该列的最后一行的位置,如果有些数据为空,或者在不知道情况下写入为空数据,会造成数据错乱,所以一定谨慎使用; if (row.getLastCellNum() != 2) { System.out.println(row.getLastCellNum()); code = -99; // 表格格式不正确 return code; } } catch (Exception e) { code = -99; // 表格格式不正确 return code; }*/ // 空记录 即:cells 为空 ! //关于row.getCell的空指针异常,如果excel中少了一格数据,而我们getCell那个数据时会生成空指针 /* if ((row.getCell(0).toString() == null || row.getCell(0).toString() .equals(""))){ code = 99; // 此条记录为空 return code; }*/ if ((row.getCell(0) == null || row.getCell(0).toString().equals("") || !Pattern.matches("^[\\u0391-\\uFFE5\\w\\s\\·]+", row.getCell(0).toString().trim()))) { code = 1; // 错误提示 :A列不得为空 return code; } if(carnum.contains(row.getCell(0).toString())){ code = 2; // 错误提示 :重复校验 return code; } if (row.getCell(0).toString().length() != 7) { code = 3; //车牌号长度不正确 return code; } if (!Pattern.matches("^[0-9]+", row.getCell(0).toString().trim())) { code = -4;//车号只能为数字 return code; } if (oilAdvanceTrainService.getOilAdvanceTrainByTrainNo(row.getCell(0).toString())){ code = 4; //数据库中存在该车号 return code; } return code; }

你可能感兴趣的:(第三十八,三十九 java中excel的导入)