SpringBoot使用POI实现上传EXECL并存数据库

工作中用到的poi解析execl并存数据库,把execl数据读到队列中之后存储数据库中,为了让大家能更好的理解,我把代码尽量多加些注释,并把逻辑改的简单易懂和字段缩短。 

页面上传execl:

<form action="../TMTrade/TMTradeUpload" method="post" enctype="multipart/form-data">
            <div class="row">
                <div class="col-md-6">
                    <label>选择TM订单文件(天猫商城订单):</label>
                    <br>
                    <input type="file" class="form-control" name="fileName" />
                </div>
                <br>
            </div>
            <br>
            <div class="row">
                <div class="col-md-3">
                    <input type="submit" value="导入TM单" class="btn btn-danger" />
                </div>
        </form>

 后端解析execl并存数据库

/**
     * TM订单上传
     * @Description: 功能描述
     */
    @PostMapping("/TMTradeUpload")
    public String TMTradeUpload(@RequestParam("fileName") MultipartFile file,Model model,HttpServletRequest request, HttpServletResponse response) {
        log.info("TM订单上传开始");
        //获取文件名 主要判断是否选择了文件
        String fileName = file.getOriginalFilename();
        if (StringUtils.isEmpty(fileName)){
            model.addAttribute("TMTradeUploadRrturnCode", "execl文件名为空");
            return "uploadTrades";
        }
        // 获取文件后缀 判断是否为execl格式的文件
        String prefix=fileName.substring(fileName.lastIndexOf("."));
        if (!prefix.toLowerCase().contains("xls") && !prefix.toLowerCase().contains("xlsx") ){
            model.addAttribute("TMTradeUploadRrturnCode", "请选择execl格式文件");
            return "uploadTrades";
        }
        Workbook workbook = null;
        File excelFile = null;
        try {
            // 防止生成的临时文件重复-建议使用UUID
            excelFile=File.createTempFile(System.currentTimeMillis()+"", prefix);
            file.transferTo(excelFile);
            //由于2003和2007的版本所使用的接口不一样,所以这里统一用Workbook做兼容
            boolean isExcel2003 = prefix.toLowerCase().endsWith("xls")?true:false;
            if(isExcel2003){
                workbook = new HSSFWorkbook(new FileInputStream(excelFile));
            }else{
                workbook = new XSSFWorkbook(new FileInputStream(excelFile));
            }
        } catch (Exception e) {
            log.info(""+e);
        }
        //Excel表中的内容  我们开始把数据存入队列,如果有需要你们可以改为ArrayList
        Queue<t_tm_trade_new> queue = new LinkedList<t_tm_trade_new>();
        Sheet sheet = workbook.getSheetAt(0);
        //这里从1开始,跳过了标题,直接从第二行开始解析
        try {
            for(int i=1; i<sheet.getLastRowNum()+1; i++) {
                Row row =sheet.getRow(i);
                for(int w=0;w<3;w++) {
                    if(row.getCell(w)!=null){row.getCell(w).setCellType(CellType.STRING);}
                }
                t_tm_trade_new tTmTradeNew = new t_tm_trade_new();
                //组装数据  把execl内的数据存到队列中
                tTmTradeNew.setTradeid(row.getCell(0).getStringCellValue());//0 订单编号 
                tTmTradeNew.setTitle(row.getCell(1).getStringCellValue());//1 订单名称(例如:XX牛排) 
                tTmTradeNew.setPrice(row.getCell(2).getStringCellValue());//2 订单价格
                queue.offer(tTmTradeNew);
            }
        } catch (Exception e) {
            log.info("文件内容格式错误"+e);
            model.addAttribute("TMTradeUploadRrturnCode", "文件内容格式错误,上传失败");
            return "uploadTrades";
        }
        //删除临时转换的文件
        if (excelFile.exists()) {
            excelFile.delete();
        }

       //开始循环队列 如果是ArrayLisy  则forEach
        while(queue.peek()!=null) {
            t_tm_trade_new t = queue.poll();//拿到对象
            if(t.getTradeid()!=null&&!t.getTradeid().trim().equals("")) {
                  tTMTradeNewDao.insertTmTradeNew(t.getTradeid(), t.getTitle(), t.getPrice());//存数据库
            }
        }
        log.info("TM订单上传完成");

        model.addAttribute("TMTradeUploadRrturnCode", "TM订单上传完成");
        return "uploadTrades";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值