java excel导入和模板下载

//模板下载
 @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
    public void exportExcel(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        OutputStream ouputStream = null;
        try {
            // 创建新的Excel 工作簿
            HSSFWorkbook workbook = new HSSFWorkbook();
            // 新建工作表,其语句为:
            HSSFSheet sheet = workbook.createSheet("sheet1");
            sheet.setColumnWidth(0, 8000);
            sheet.setColumnWidth(1, 5000);
            sheet.setColumnWidth(2, 5000);
            sheet.setColumnWidth(3, 5000);



            // 声明"Sheet1"工作表的第一行表头信息
            String[] tableHeader = new String[]{
                    "学号", "申请金额","审批金额","贷款年份"};

            // 创建第一行
            HSSFRow firstRow = sheet.createRow((short) 0);
            // 创建第一行里的格子
            for (int i = 1; i <= tableHeader.length; i++) {
                // 创建第i个格子
                HSSFCell cell = firstRow.createCell((short) (i - 1));
                if(cell.getCellType()!=1){
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                }


                //新增的四句话,设置CELL格式为文本格式
                HSSFCellStyle cellStyle2 = workbook.createCellStyle();
                HSSFDataFormat format = workbook.createDataFormat();
                cellStyle2.setDataFormat(format.getFormat("@"));
                cell.setCellStyle(cellStyle2);
                // 定义单元格为字符串类型
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(tableHeader[i - 1]);
            }

            //创建第二行里的例子
            String[] example = new String[]{
                  "1001011","1000","1000","2018"};
            HSSFRow secondRow = sheet.createRow((short) 1);
            for(int i = 1 ; i<=example.length;i++){
                // 创建第i个格子
                HSSFCell cell = secondRow.createCell((short) (i-1));
                if(cell.getCellType()!=1){
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                }
                //新增的四句话,设置CELL格式为文本格式
                HSSFCellStyle cellStyle2 = workbook.createCellStyle();
                HSSFDataFormat format = workbook.createDataFormat();
                cellStyle2.setDataFormat(format.getFormat("@"));
                cell.setCellStyle(cellStyle2);
                // 定义单元格为字符串类型
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(example[i-1]);
            }
            for (int i = 1;i<=4;i++){
                if (i<=4) {
                    HSSFCell cell3 = firstRow.createCell((short) (i - 1));
                    HSSFCellStyle style = workbook.createCellStyle();
                    style.setFillForegroundColor(HSSFColor.RED.index);
                    style.setFillPattern(CellStyle.SOLID_FOREGROUND);
                    cell3.setCellStyle(style);
                    cell3.setCellValue(tableHeader[i - 1]);
                }
            }
            String fileName = "贷款导入模板.xls";// 设置下载时客户端Excel的名称
            response.setContentType("application/vnd.ms-excel");
            // 解决中文乱码
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String(fileName.getBytes("gbk"), "iso-8859-1"));
            ouputStream = response.getOutputStream();
            workbook.write(ouputStream);
            ouputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 操作结束,关闭文件
            IOUtils.closeQuietly(ouputStream);
        }

    }

   //上传

@RequestMapping(value = "/upload", method = RequestMethod.POST)
    public void upload(@RequestParam MultipartFile file,String pycc,
                       HttpServletRequest request,
                       HttpServletResponse response) {

        try {
            int flag = 0;
            String json;
            // 信息正常学生集合
            List<Loan> loanStudentList = new ArrayList<>();
            // 信息有误学生集合
            List<Loan> errorstudentList = new ArrayList<>();
            if (file.isEmpty()) {
                System.out.println("文件未上传");
            } else {
                Map<String, String> xhMap = new HashMap<>();
                Criteria c1 = new Criteria();
                List<Loan> studentLists= loanService.queryListForPage(c1);
                if (studentLists!=null) {
                    for (Loan stu : studentLists) {
                        if (stu!=null) {
                            xhMap.put(stu.getXh(), stu.getXh());
                        }

                    }
                }
                File xlsFile = FileDownLoadUtils.upload(file, request, null);


                Workbook workbook = ExcelUtils.getWorkbook(xlsFile);

                Sheet sheet = workbook.getSheetAt(0);

                Loan loan = null;
                Row row = null;
                Row titleRow = sheet.getRow(0);
                for (int i = 1; i < sheet.getLastRowNum() + 1; i++) {
                    loan = new Loan();
                    row = sheet.getRow(i);

                    if (row != null){

                        setImport(titleRow, row, loan,sheet);
                        loan.setErrorMsg(validator(loan,xhMap));
                         // 学生信息存在错误
                        if (StringUtils.isNotBlank(loan.getErrorMsg())) {
                            errorstudentList.add(loan);
                        } else {
                            loanStudentList.add(loan);
                        }
                    }
                }
                xlsFile.delete();

            }
            response.setContentType("text/html;charset=utf-8");
            try {
                ExtReturn result = null;
                if(errorstudentList.size()>0){
                    result = new ExtReturn(false, "导入失败,数据错误!", errorstudentList);
                }else{

                    // 初次插入将数据插入相关表
                    int res = loanService.insertList(loanStudentList);
                    // 将错误学生信息返回到前台显示
                    if(res == 0){
                        result = new ExtReturn(false, "导入失败,数据已存在!", errorstudentList);
                    }else{
                        result = new ExtReturn(true, "导入成功!",errorstudentList);
                    }
                }

                json = JackJson.fromObjectToJson(result);
                System.out.println(json);
                response.getWriter().write(json);
                response.getWriter().flush();
                response.getWriter().close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//上传读取excel时调用的方法

 private void setImport(Row titleRow, Row row,Loan loan,Sheet sheet){
        int num = 0;
        StringBuilder msg = new StringBuilder();
        int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
        for(int i=0; i<coloumNum; i++){
            String title = ExcelUtils.getCellValue(titleRow.getCell(i));
            if(StringUtils.isBlank(title)){
                break;
            }else{
                num = i;
            }
        }
        String title = "";
        String value = "";
        for(int i=0; i<=num; i++){
            title = ExcelUtils.getCellValue(titleRow.getCell(i));
            value = ExcelUtils.getCellValue(row.getCell(i));
            switch (title){
                case "学号":
                    if (StringUtils.isNotBlank(value)){
                        loan.setXh(value);
                    }
                    break;
                case "申请金额":
                    if (StringUtils.isNotBlank(value)){
                        loan.setLoanMoney(Double.valueOf(value));
                    }
                    break;

                case "审批金额":
                    if (StringUtils.isNotBlank(value)){
                        loan.setApproveMoney(Double.valueOf(value));
                    }
                    break;

                case "贷款年份":
                    if (StringUtils.isNotBlank(value)){
                        loan.setPayYear(value);
                    }
                    break;
            }
        }


    }

//验证方法

public String validator( Loan loan,Map<String,String> xhMap){
        StringBuilder msg = new StringBuilder();
        boolean flag = false;
        if (StringUtils.isBlank(loan.getXh())){
            msg.append("学号不能为空");
        }
       if (StringUtils.isBlank(loan.getPayYear())){
           msg.append("贷款年份不能为空");
       }
        if(StringUtils.isNotBlank(xhMap.get(loan.getXh()))){
            msg.append("该学生已申请过贷款");
        }
        if (loan.getApproveMoney()==null){
            msg.append("审批金额不能为空");
        }
        if (loan.getLoanMoney()==null){
            msg.append("申请金额不能为空");
        }
        Criteria criteria = new Criteria();
        StudentInfo studentInfo = studentInfoService.getStudentInfoByXh(loan.getXh());
        loan.setStudentId(studentInfo.getId());
        if (StringUtils.isNotBlank(loan.getStudentId())){
            criteria.put("studentId",loan.getStudentId());
        }
        if (StringUtils.isNotBlank(loan.getPayYear())){
            criteria.put("payYear",loan.getPayYear());
        }
        List<PayPayment> list1= payPaymentService.queryListForPage(criteria);
        if (list1.size()==0){
            msg.append("请先设置缴费金额;");
        }else if(loan.getApproveMoney()>(list1.get(0).getNeedPay()-list1.get(0).getHadPay())){
            msg.append("审批金额超过待缴费金额");
        }
        return msg.toString();
    }


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值