EasyPoi导入数据 字段为null的情况

情况一:

导入的表格名字与代码中的Excel中定义的名字不一致。

情况二:

如果有表头行和标题行,必须删除,否则有肯定会获取不到数据,或者获取不到某些字段,插入到数据库中,字段自然就为null了。

一定要看清楚,有几个表头和几个标题行,很重要!!!

下边有一个标题行和一个表头,所以必须把这两个都删除:

    @ApiOperation(value = "导入员工列表 .xml")
    @PostMapping(value = "/importEmployee")
    public CommonRes<Object> importEmployee(@RequestParam("file") MultipartFile multipartFile) {
        ImportParams importParams = new ImportParams();

        // 删掉表格的表头行(如果导入有表头的话)
        importParams.setHeadRows(1);

        //表格标题行数,默认0
        importParams.setTitleRows(1);
    }

 

关于时间取不到的情况:

除了名称不正确,还有一种情况是格式不正确,前端传过来的格式与字段本身的格式对应不上, 可以使用 @Excel(format="") format属性来格式化前端传过来的时间。

下边定义的格式为 :yyyy-MM-dd 对应前端传的格式为:"2021-10-21"

### 关于 EasyPoi 数据验证 EasyPoi 提供了多种方式进行数据验证,确保导入数据符合预期格式和业务逻辑。对于无法通过 `ImportParam` 参数设置进行校验的情况,在导入之前可以通过编码方式先做一次校验[^3]。 #### 编码前校验实例 为了防止无效数据进入系统,可以在实际导入操作执行前对文件内容进行初步筛查: ```java // 创建导入参数并指定需要额外处理的列索引 ImportParams params = new ImportParams(); params.setNeedVerify(true); // 开启默认验证机制 List<Object> list = ExcelImportUtil.importExcel(new File("path/to/excel"), EntityClass.class, params); if (list.isEmpty()) { System.out.println("未找到有效记录"); } ``` #### 自定义校验器实现更复杂规则 当内置选项不足以满足需求时,则可通过编写自定义校验处理器来增强灵活性。下面是一个简单的例子展示如何创建一个用于检查特定字段值范围的有效性的校验函数: ```java public class CustomVerifier implements VerifyHandler { @Override public boolean verify(Object obj) throws Exception { YourEntity entity = (YourEntity)obj; // 对象级别的约束判断... if (!isValid(entity)) return false; // 单元格级别(即每一行)的具体属性检验 List<String> errorMessages = Lists.newArrayList(); if (entity.getStatus() != null && !"1".equals(entity.getStatus()) && !"2".equals(entity.getStatus())) { errorMessages.add("状态应为'1'(表示正常)'或'2'(异常)"); } // 返回最终结果以及错误信息集合 return CollectionUtils.isEmpty(errorMessages); } private boolean isValid(YourEntity entity){ // 实现具体业务逻辑合法性检测算法 ... } } ``` 接着将此校验器应用到具体的导入过程中: ```java ImportParams importParams = new ImportParams(); importParams.setVerifyHandler(new CustomVerifier()); List<YourEntity> resultList = ExcelImportUtil.importExcel(inputStream, YourEntity.class, importParams); ``` 此外,针对 Hibernate Validator 注解不生效的问题,由于 `verifyHandler` 方法仅会被调用一次的事实,意味着它不会遍历整个集合内的每一个元素来进行逐项审核。因此建议在获取到全部解析后的对象列表之后再单独对其进行二次校验[^4]。 最后值得一提的是,如果希望简化某些固定映射关系(如数字转文字),可以利用 `@Excel` 注解中的 `replace` 属性轻松达成目的[^5]: ```java @Excel(name="状态", replace={"进行中_1","完成_2","结束_3"}) private String status; ``` 以上便是几种常见情况下使用 EasyPoi 执行数据验证的方法概览。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值