@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) throws NoSuchFieldException, IllegalAccessException {
/*
* TODO::字段动态添加修改下拉框开始
*/
// sex 要修改的字段
Field field1 = MyExcelVo.class.getDeclaredField("sex");
// 获取 注解实例
Excel excelField1 = field1.getAnnotation(Excel.class);
InvocationHandler invocationHandler1 = Proxy.getInvocationHandler(excelField1);
// 获取 AnnotationInvocationHandler 的 memberValues 字段
Field hField1 = invocationHandler1.getClass().getDeclaredField("memberValues");
// 因为字段是 private final 修饰,所以要打开权限
hField1.setAccessible(true);
// 获取 memberValues
Map memberValues1 = (Map) hField1.get(invocationHandler1);
// 修改 需要的 属性值
String[] sexArr = new String[]{"男", "女", "未知"};
memberValues1.put("combo", sexArr);
// typeName 要修改的字段
Field field2 = MyExcelVo.class.getDeclaredField("typeName");
// 获取 注解实例
Excel excelField2 = field2.getAnnotation(Excel.class);
InvocationHandler invocationHandler2 = Proxy.getInvocationHandler(excelField2);
// 获取 AnnotationInvocationHandler 的 memberValues 字段
Field hField2 = invocationHandler2.getClass().getDeclaredField("memberValues");
// 因为字段是 private final 修饰,所以要打开权限
hField2.setAccessible(true);
// 获取 memberValues
Map memberValues2 = (Map) hField2.get(invocationHandler2);
// 修改 需要的 属性值
String[] typeArr = Arrays.stream(TypeEnum.values()).map(TypeEnum::getDesc).toArray(String[]::new);
//String[] typeArr = new String[]{"个人", "集体"};
memberValues2.put("combo", typeArr);
// interestsName 要修改的字段
Field field3 = MyExcelVo.class.getDeclaredField("interestsName");
// 获取 注解实例
Excel excelField3 = field3.getAnnotation(Excel.class);
InvocationHandler invocationHandler3 = Proxy.getInvocationHandler(excelField3);
// 获取 AnnotationInvocationHandler 的 memberValues 字段
Field hField3 = invocationHandler3.getClass().getDeclaredField("memberValues");
// 因为字段是 private final 修饰,所以要打开权限
hField3.setAccessible(true);
// 获取 memberValues
Map memberValues3 = (Map) hField3.get(invocationHandler3);
// 修改 需要的 属性值
List<InterestsListVo> interestsListVos = new ArrayList<>();
InterestsListVo interestsListVo1 = new InterestsListVo();
interestsListVo1.setId(1L);
interestsListVo1.setTitle("兴趣分类1");
interestsListVos.add(interestsListVo1);
InterestsListVo interestsListVo2 = new InterestsListVo();
interestsListVo2.setId(2L);
interestsListVo2.setTitle("兴趣分类2");
interestsListVos.add(interestsListVo2);
String[] itArr = interestsListVos.stream().map(InterestsListVo::getTitle).distinct().toArray(String[]::new);
//String[] itArr = new String[]{"兴趣分类1", "兴趣分类2"};
memberValues3.put("combo", itArr);
/*
* TODO::字段动态添加修改下拉框结束
*/
ExcelUtil<MyExcelVo> util = new ExcelUtil<MyExcelVo>(MyExcelVo.class);
util.importTemplateExcel(response, "自定义数据");
}
自定义Excel返回类
/**
* 自定义Excel返回类
*/
@Data
private class MyExcelVo implements Serializable {
/**
* 性别
*/
@Excel(name = "性别")
private String sex;
/**
* 类别:0-个人 1-集体
*/
@Excel(name = "类别")
private String typeName;
/**
* 兴趣爱好分类名称
*/
@Excel(name = "兴趣爱好分类名称")
private String interestsName;
}
自定义InterestsListVo返回类
/**
* 自定义InterestsListVo返回类
*/
@Data
private class InterestsListVo implements Serializable {
/**
* ID
*/
private Long id;
/**
* 名称
*/
private String title;
}
自定义TypeEnum枚举类
/**
* 自定义TypeEnum枚举类
*/
private enum TypeEnum {
/**
* 类别:0-个人 1-集体
*/
TYPE_ONE(0L, "个人"),
TYPE_TWO(1L, "集体");
private Long code;
private String desc;
TypeEnum(Long code, String desc) {
this.code = code;
this.desc = desc;
}
public Long getCode() {
return code;
}
public void setCode(Long code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Long getCodeByDesc(String desc) {
for (TypeEnum typeEnum : TypeEnum.values()) {
if (Objects.equals(desc, typeEnum.getDesc())) {
return typeEnum.getCode();
}
}
return null;
}
}