EasyExcel支持国际化,在导入的时候,通过覆盖DefaultAnalysisEventProcessor类动态修改列名

wtlkbnrh  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(125)

一、实体类

/**
* 所属国家/地区
*/
@ExcelProperty(value = "所属国家/地区")
private String countryRegion;

二、为了支持中英文

在一个格子里,采用换行的方式,中英文展示。(这里只要是拿到ExcelProperty的中文,然后找到对应的英文翻译,通过 \n 换行的方式,实现中英文在一个格子里面的国际化。)

三、在导入的时候,通过修改Excel列名的方式,实现和ExcelProperty配置一样的名字

public class EasyExcelListener extends AnalysisEventListener ,在invokeHead方法中修改列名。

@Override
    public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
        for (Integer integer : headMap.keySet()) {
            String[] names = headMap.get(integer).getStringValue().split("\n");
            if (names.length == 2) {
                headMap.get(integer).setStringValue(names[0]);
            }
        }
    }

四、问题——第三步的修改类名不生效

上面替换表头数据是不生效的, 因为在回调invokeHead之前就已经把表头数据build存储在了headMap里, 需要把buildMap放在回调之后。所以利用的方案是利用同全类名(包名和类文件名全部一致)的加载顺序优先级来来覆盖原 class。重写了一次DefaultAnalysisEventProcessor。
请问除了通过全类名覆盖的方式,现在还有其他方式吗?

相关问题