Easypoi excel导入时日期校验

遇到的问题

excel 在输入时间时,会从在两种单元格格式,文本格式和日期格式;

后端接收的时候,有两种情况

  1. 用 LocalDate 接收就只能接收单元格为日期格式的,单元格为文本格式的接收不了
  2. 用 String 接收就只能接收单元格为文本格式的,单元格为日期格式的接收不了

如下图所示:

第一种情况:
1.1.png
1.2.png
1.3.png
第二种情况:
2.1.png
2.2.png
2.3.png
综上:总是会有一种条件不满足

解决办法

统一用 String 接收,将 excel 以日期格式导入的日期转换为 String 类型后,再用 String 接收即可
Easypoi 注解 @Excel 中有一个属性 format、importFormat、exportFormat;
3.png
按照需求的时间格式设定即可,我这里使用的是"yyyy/MM/dd"
4.png
@Pattern 这个注解,字符串根据正则校验的一个注解,按照需求编写正则表达式,以及校验不通过的返回消息即可;

以上是我暂时想到的解决办法,若各位大佬有更好的解决办法,还请指点,谢谢!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要使用 Easypoi 实现批量导入 Excel 数据并返回校验失败的数据,并将其写入 Excel 文件,可以按照以下步骤进行操作: 1. 定义一个 Excel 实体类,用于存储导入Excel 数据,同添加校验注解,如下所示: ```java public class UserExcelEntity implements Serializable { @Excel(name = "姓名", orderNum = "0") @NotBlank(message = "姓名不能为空") private String name; @Excel(name = "年龄", orderNum = "1") @Range(min = 1, max = 200, message = "年龄范围必须在1-200之间") private Integer age; // ... 其他属性和校验注解 } ``` 2. 定义一个导入工具类,使用 Easypoi 实现批量导入 Excel 数据,并返回校验失败的数据,如下所示: ```java public class ExcelImportUtil { public static <T> List<T> importExcel(MultipartFile file, Class<T> clazz, List<String> errorMsg) throws Exception { List<T> successList = new ArrayList<>(); List<T> errorList = new ArrayList<>(); ImportParams params = new ImportParams(); params.setTitleRows(1); params.setHeadRows(1); ExcelImportResult<T> result = ExcelImportUtil.importExcelMore(file.getInputStream(), clazz, params); List<T> list = result.getList(); for (T obj : list) { Set<ConstraintViolation<T>> validateSet = Validation.buildDefaultValidatorFactory().getValidator().validate(obj); if (validateSet.isEmpty()) { successList.add(obj); } else { errorMsg.add(buildErrorMsg(validateSet)); errorList.add(obj); } } if (!errorList.isEmpty()) { String fileName = "error_" + System.currentTimeMillis() + ".xlsx"; String filePath = "D:/excel/" + fileName; ExportParams exportParams = new ExportParams(); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, errorList); FileOutputStream fos = new FileOutputStream(filePath); workbook.write(fos); fos.close(); } return successList; } private static <T> String buildErrorMsg(Set<ConstraintViolation<T>> validateSet) { StringBuilder sb = new StringBuilder(); for (ConstraintViolation<T> validate : validateSet) { sb.append(validate.getPropertyPath().toString()).append(":").append(validate.getMessage()).append(";"); } return sb.toString(); } } ``` 3. 在Controller中调用导入工具类,将校验失败的数据写入 Excel 文件,并返回校验成功的数据,如下所示: ```java @PostMapping("/import") public Result importExcel(@RequestParam("file") MultipartFile file) throws Exception { List<String> errorMsg = new ArrayList<>(); List<UserExcelEntity> list = ExcelImportUtil.importExcel(file, UserExcelEntity.class, errorMsg); if (!errorMsg.isEmpty()) { return Result.error("部分数据导入失败,请下载错误文件查看详情!"); } // 保存校验成功的数据 userService.saveBatch(list); return Result.success("数据导入成功!"); } ``` 其中,将校验失败的数据写入 Excel 文件的代码如下: ```java if (!errorList.isEmpty()) { String fileName = "error_" + System.currentTimeMillis() + ".xlsx"; String filePath = "D:/excel/" + fileName; ExportParams exportParams = new ExportParams(); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, errorList); FileOutputStream fos = new FileOutputStream(filePath); workbook.write(fos); fos.close(); } ``` 这里使用了 Easypoi 的 `ExcelExportUtil.exportExcel()` 方法,将校验失败的数据导出为 Excel 文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BrightChen666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值