现有框架的不足之处
EasyPoi是一个java语言的,处理Excel、Word的轻量级框架,它基于对Apache POI的封装,主打功能就是简单。其中,提供了更加方便的@Excel注解以实现导出功能。但是在特定业务场景下,我们需要对导出Excel的列标题进行动态调整,即在不同环境下,表头的名称不同。现有的功能无法满足这种需求。
我的改进内容
EasyPoi提供@Excel注解,用于修饰Java类的属性,该注解中有一个name参数。EasyPoi在导出时,会读取@Excel注解的name参数值,作为生成Excel的列的表头。这个参数仅支持固定值,不支持变量。
如果本系统服务于多个平台,各平台对score的命名不同。在A平台叫做“用户分数”,B平台叫做“用户积分”,按照现有EasyPoi框架能力,无法实现动态调整name参数值,只能为每个平台单独定制一套导出逻辑,不仅费时费力,而且维护成本较大。
为了避免这种情况发生,所以考虑对@Excel注解的name参数进行增强。增强后的name参数,允许传入带有${}格式的变量,如:
在注解生效前,取出name参数值,对其进行判断,如存在${}格式的变量,就根据当前登录用户的平台id,动态读取数据库中配置的score变量对应的值,并进行替换。
通过这种方式,即可实现Excel表头的动态变化。下图为增强后,A平台和B平台的Excel导出效果:
改进的成果
以前面对客户的这种需求,我们只能另写一套导出接口,不仅费时费力,且难以维护。在对EasyPoi框架进行增强后,遇到这种业务场景,可以非常高效简洁的实现业务方效果。