今天遇到需求:导入Excel时候列头会发生变化,客户是大爷要求你改代码,
导入Excel是用easypoi做的,识别表头是用注解@Excel(name = "xxx")通过这个name来匹配
那你表头要动,我这个注解是硬编码
所以就有动态设置这个表头
public class JavaVo{
@Excel(name = "xxx")
private String userName;
//省略getset方法
}
ExcelImportUtil.importExcel(file.getInputStream(), configClass(JavaVo.class), params);
代码如下
private Class configClass(Class c , String val) {
Field[] fields = c.getDeclaredFields();
try {
for(int i = 0;i < fields.length;i++){
Field f = fields[i];
Excel excelAn = f.getAnnotation(Excel.class);//Excel是注解类型
if(excelAn == null){
continue;
}
InvocationHandler h = Proxy.getInvocationHandler(excelAn);
Field hField = h.getClass().getDeclaredField("memberValues");
// 因为这个字段事 private final 修饰,所以要打开权限
hField.setAccessible(true);
// 获取 memberValues
Map memberValues = (Map) hField.get(h);
// 修改 value 属性值 这里修改的是@Excel(name = "姓名")
//name是key
memberValues.put("name", val);
}
} catch (Exception e) {
e.printStackTrace();
}
return c;
}