springboot中整合POI实现上传数据导入

1.添加pom依赖

<!--poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

2.前台实现文件上传

html:

<form id="yjtzForm" class="form-inline" method="post" enctype="multipart/form-data">
      <div class="form-group">
          <label for="yjtz"> 移交台账文件:</label>
          <input type="file"  class="form-control" id="yjtz" name="yjtz">
      </div>
      <button id="yjtzBtn" class="btn btn-primary" onclick="FwdjcxImp.yjtzB()" >移交台账导入</button>
</form>

js:

var FwdjcxImp = {

};
FwdjcxImp.yjtzB=function() {
    //var form = $("#yjtzForm").serialize();
    var form = new FormData(document.getElementById("yjtzForm"));
    //console.log(form);
    //提交信息
    $.ajax({
        url: Feng.ctxPath + "/fwdjcx/yjtzImport",
        type: 'POST',
        dataType: "json",
        async: false,
        cache: false,
        data: form,
        processData: false,
        contentType: false,
        success: function (result) {
            //console.log(result)
            Feng.success(result);
        },
        error: function (err) {
            Feng.error("导入失败!");
        }
    });

}

3.后台接收文件,并读取exel内容,保存到数据库中

controller:

@PostMapping("/yjtzImport")
    @ResponseBody
    public String yjtzImport(@RequestParam("yjtz") MultipartFile file, HttpServletRequest request) throws Exception {

        //接收到的文件转成输入流
        InputStream inputStream = file.getInputStream();
        String result = fwdjcxzmService.yjtzImport(inputStream);

        return result;
    }

service:

@Override
    public String yjtzImport(InputStream inputStream) throws Exception {

        Integer addNum = 0;
        Integer updateNum = 0;

        //创建工作簿
        Workbook wb = WorkbookFactory.create(inputStream);
        //读取第一个sheet
        Sheet sheet = wb.getSheetAt(0);
        for (int r =2;r<sheet.getPhysicalNumberOfRows();r++){
            Row row = sheet.getRow(r);
            String qlr = row.getCell(2).getStringCellValue();
            if (StringUtils.isNotEmpty(qlr)){
                //将行中的数据转成对象
                Fwdjyjtz fwdjyjtz = new Fwdjyjtz(row);

                //1.根据 坐落_权利人_证号 进行查询,是否存在记录
                EntityWrapper<Fwdjyjtz> entityWrapper = new EntityWrapper<>();
                entityWrapper.eq("QLR",qlr);
                List<Fwdjyjtz> list = fwdjyjtzMapper.selectList(entityWrapper);
                //2.若存在更新,不存在新增
                if (CollectionKit.isNotEmpty(list)){
                    for (Fwdjyjtz f:list){
                        fwdjyjtz.setId(f.getId());
                        fwdjyjtzMapper.updateById(f);
                        updateNum ++;
                    }
                }else {
                    fwdjyjtzMapper.insert(fwdjyjtz);
                    addNum ++;
                }
            }
        }
        return "成功新增:"+addNum+"行,更新:"+updateNum;
    }

model:


    public Fwdjyjtz(Row row) {
        this.zh = row.getCell(1).getStringCellValue();
        this.qlr = row.getCell(2).getStringCellValue();
        this.sfzh = row.getCell(3).getStringCellValue();
        //登记时间
        String djsj = row.getCell(4).getStringCellValue();
        //this.djrq = StringUtils.isNotEmpty(djsj.trim())? DateTimeKit.parse(djsj.replace(".","-")):null;

        this.scdj = row.getCell(5).getStringCellValue();
        this.yt = row.getCell(6).getStringCellValue();
        this.cwbj = row.getCell(7).getStringCellValue();
        this.zyy = row.getCell(8).getStringCellValue();
        if (row.getCell(9).getCellTypeEnum().equals(CellType.NUMERIC)){
            this.ym = String.valueOf(row.getCell(9).getNumericCellValue());
        }else {
            this.ym = row.getCell(9).getStringCellValue();
        }
        this.bz = row.getCell(10).getStringCellValue();
    }

        实现的逻辑很简单,①从前台上传exel文件②接收文件③读取exel文件内容并保存。我们的项目持久层用的mybatis-plus,可以根据自己项目的持久层更改入库的代码。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值