一、实体类
/**
* 所属国家/地区
*/
@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。
请问除了通过全类名覆盖的方式,现在还有其他方式吗?
1条答案
按热度按时间exdqitrt1#
@zhuangjiaju 大神帮忙看看呢