Open YangJingf opened 2 months ago
/** * 所属国家/地区 */ @ExcelProperty(value = "所属国家/地区") private String countryRegion;
在一个格子里,采用换行的方式,中英文展示。(这里只要是拿到ExcelProperty的中文,然后找到对应的英文翻译,通过 \n 换行的方式,实现中英文在一个格子里面的国际化。)
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。 请问除了通过全类名覆盖的方式,现在还有其他方式吗?
@zhuangjiaju 大神帮忙看看呢
一、实体类
二、为了支持中英文
在一个格子里,采用换行的方式,中英文展示。(这里只要是拿到ExcelProperty的中文,然后找到对应的英文翻译,通过 \n 换行的方式,实现中英文在一个格子里面的国际化。)
三、在导入的时候,通过修改Excel列名的方式,实现和ExcelProperty配置一样的名字
public class EasyExcelListener extends AnalysisEventListener ,在invokeHead方法中修改列名。
四、问题——第三步的修改类名不生效
上面替换表头数据是不生效的, 因为在回调invokeHead之前就已经把表头数据build存储在了headMap里, 需要把buildMap放在回调之后。所以利用的方案是利用同全类名(包名和类文件名全部一致)的加载顺序优先级来来覆盖原 class。重写了一次DefaultAnalysisEventProcessor。 请问除了通过全类名覆盖的方式,现在还有其他方式吗?