实体类:
public class ExportPlanDetailDto extends BaseRowModel implements Serializable { @Excel(name = "部门", width = 15) private String deptName; @Excel(name = "工作项目" , width = 25) private String taskTitle; @Excel(name = "季度目标", width = 50,height = 50) private List<String> aimList;}
方法调用放在导出方法需要的位置
通过反射修改表抬头:
/**
* @param vo 页面导出参数
* @return
* @description: 反射修改表头详细信息
* @author hyh
* @date 2022/7/5 11:24
*/
private void upDateTitle(PlanReqVo vo) throws NoSuchFieldException, IllegalAccessException {
// 获取目标实体类的目标字段
Field field = ExportPlanDetailDto.class.getDeclaredField("aimList");
// 获取该字段的注解
Excel annotation = field.getAnnotation(Excel.class);
// 获取Excel注解所持有的 InvocationHandler
InvocationHandler handler = Proxy.getInvocationHandler(annotation);
Field hFile = handler.getClass().getDeclaredField("memberValues");
// 设值私有可访问
hFile.setAccessible(true);
Map<Object, Object> map = (Map<Object, Object>) hFile.get(handler);
//获取第一栏值-计划类型:
String planName=vo.getPlanType()==1 ? "月计划" : (vo.getPlanType() == 2 ? "季度计划" : "年计划");
《---------此处采用三元运算符判断值,根据情况------------》
//季度或月份
String value=null;
if (vo.getPlanType() != 3) {
value=vo.getPlanType()==1?vo.getTypeValue()+"":vo.getTypeValue()+"";
}
// 获取配置信息
String nameTitle=vo.getTypeYear()+"年"+(ObjectUtils.isEmpty(vo.getTypeValue())?"":"第"+value)+planName+"目标";
// 修改属性值
map.put("name", nameTitle);
}
效果: