使用POI导入Excel数据

首先引入配置

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
@SneakyThrows
@Override
public ActionResult testImportExcel(MultipartFile fileName) {
   ContractDto contractDto = new ContractDto();
   InputStream stream = null;
   try {
        // 创建改文件的输入流
        stream = fileName.getInputStream();
        // 创建工作簿
        Workbook workbook = WorkbookFactory.create(stream);
        // 获取一个工作表,下标从0开始
         Sheet sheet = workbook.getSheetAt(0);
            // 通过循环,逐行取出表中每行数据
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                // 获取行
                Row row = sheet.getRow(i);
                // 获取行中列的数据
                String[] value = new String[5];
                //判断合同编号不为空
                if (isEmptyCell(row.getCell(0))) {
                    throw new ExcelException("合同编号不能为空");
                }
                //判断租户名称不为空
                if (isEmptyCell(row.getCell(1))) {
                    throw new ExcelException("租户名称不能为空");
                }
                //判断单元面积不为空
                if (isEmptyCell(row.getCell(2))) {
                    throw new ExcelException("摊位面积不能为空");
                }
                //判断租户手机号不为空
                if (isEmptyCell(row.getCell(3))) {
                    throw new ExcelException("租户手机号不能为空");
                }
                //判断身份证号不为空
                if (isEmptyCell(row.getCell(4))) {
                    throw new ExcelException("身份证号不能为空");
                }


                row.getCell(0).setCellType(CellType.STRING);
                row.getCell(1).setCellType(CellType.STRING);
                row.getCell(2).setCellType(CellType.STRING);
                row.getCell(3).setCellType(CellType.STRING);
                row.getCell(4).setCellType(CellType.STRING);

                value[0] = row.getCell(0).getStringCellValue();
                value[1] = row.getCell(1).getStringCellValue();
                value[2] = row.getCell(2).getStringCellValue();
                value[3] = row.getCell(3).getStringCellValue();
                value[4] = row.getCell(4).getStringCellValue();


                if (!isEmptyCell(row.getCell(2))) {
                    String stallExtent = row.getCell(2).getStringCellValue();
                    if (!stallExtent.matches("^[+-]?\\d+(\\.\\d*)?")) {
                        throw new ExcelException("摊位面积请输入正确的数字");
                    }
                }
               //赋值
                contractDto.setContractNumber(row.getCell(0).getStringCellValue());
                contractDto.setTenantName(row.getCell(1).getStringCellValue());
                //面积
                if (StringUtil.isNotEmpty(row.getCell(2).getStringCellValue())) {
                    contractDto.setStallExtent(new BigDecimal(row.getCell(2).getStringCellValue()));
                }
                contractDto.setTenantPhone(row.getCell(3).getStringCellValue());
                contractDto.setIdCard(row.getCell(4).getStringCellValue());

                //打印拿到的数据
                System.out.println(contractDto.toString());
                //插入数据库
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.info("抛出异常日志:{}", e.toString());
            throw new ExcelException(e.getMessage());
        }  finally {
            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    log.info("抛出异常日志:{}", e.toString());
                }
            }
        }
        return ActionResult.success();
    }

//判断单个单元格是否为空
public static boolean isEmptyCell(Cell cell) {
if (cell == null || cell.getCellType().equals(CellType.BLANK)) {
      return true;
    }
      return false;
}

测试结果: 

fca6b3a7728949dc8974b8a4b43a39e2.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值