Easypoi校验表头是否正确

1,744 阅读1分钟

最近做了一个需求,需要校验Excel表头,原有的项目已经引入了EasyPoi的依赖,本来想用阿里的EasyExcel的,但是EasyExcel要求的poi的版本较高,而这个项目的EasyPoi版本为3.2.0,对应的poi版本为3.15,比较低,引入EasyExcel就需要处理依赖冲突的问题,但是升级依赖版本,又可能导致已有功能会有问题,

贴一下使用的依赖:

<!-- 导入导出 -->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-web</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-annotation</artifactId>
    <version>3.2.0</version>
</dependency>

EasyPoi与内置的poi版本对应关系

image.png

而EasyExcel支持的最低poi版本为3.17

贴一张EasyExcel官方的图:

image.png

因为有以上这些问题存在,故不打算升级poi的版本,使用已有的EasyPoi来实现本次功能。

有个需求是校验Excel模板的表头是否正确,但是没有找到对应的校验方法。

后来终于在源码中找到了蛛丝马迹。

看到了这个:

image.png

找到引用它的地方,发现作者已经进行了封装,源码如下:

image.png

所以我们只需要捕捉这个ExcelImportException异常即可。

还有个前提,是需要在导入实体上添加一个属性,为true时会自动校验表头信息

isImportField = "true"

完整如下:

@Excel(name = "状态", isImportField = "true")
@NotBlank(message = "状态为空", groups = {ValidateGroup.ImportGroup.class})
private String statusName;

service中实现如下:

catch (ExcelImportException e) {
    log.error(e.getMessage());
    if (Objects.equals(ExcelImportEnum.IS_NOT_A_VALID_TEMPLATE, e.getMessage())) {
        return ResponseUtils.responseFail("导入模板错误");
    }
}

总结一下:

1、在实体类中添加@Excel注解,设置isImportField为true

2、在逻辑层catch对应异常,返回想要的错误信息

End。