业务场景:我们使用poi实现数据导出时,通常是根据@Excel(name=“xxx”)来确定列名。通常情况下这个是不会发生变动的。但这里就说少数情况,在我们需要这里根据某些情况来进行改变的时候,我们就需要用到反射。

AirQualityRankingResp.java

@Data
public class AirQualityRankingResp {/** 站点名称 */@Excel(name = "站点名称")private String site;private String siteNumber;@Excel(name = "分析时间")private String dateTime;/** 污染因子 */private String pollutionFactor;@Excel(name = "AQI")private Double value;/** 排名 */@Excel(name = "排名")private Integer ranking;
}

正常使用@Excel导出数据如下

动态修改@Excel的属性,代码实现

  /*** 通过反射动态设置导出的Excel列名** @param annotatedColumnName:实体类中被@Excel注解的字段名* @param annotationFieldName:实体类中被@Excel中注解的属性名* @param newAnnotationFieldValue:属性的新值*/private void setExcelAnnotationValue(String annotatedColumnName, String annotationFieldName, String newAnnotationFieldValue){try{Class<AirQualityRankingResp> airQualityRankingRespClass = AirQualityRankingResp.class;Field classDeclaredField =  airQualityRankingRespClass.getDeclaredField(annotatedColumnName);Excel excel = classDeclaredField.getAnnotation(Excel.class);InvocationHandler excelInvocationHandler = Proxy.getInvocationHandler(excel);Field excelInvocationHandlerField = excelInvocationHandler.getClass().getDeclaredField("memberValues");excelInvocationHandlerField.setAccessible(true);Map map = (Map) excelInvocationHandlerField.get(excelInvocationHandler);map.put(annotationFieldName, newAnnotationFieldValue);} catch (Exception e) {e.printStackTrace();}}
  • 使用示例
   @RequestMapping(value = "/rankingAnalysisExportXls")public ModelAndView exportXls(HttpServletRequest request, AirRankingReq airRankingReq) {switch (airRankingReq.getName()){case "2":setExcelAnnotationValue("value","name","SO2");break;case "3":setExcelAnnotationValue("value","name","NO2");break;case "4":setExcelAnnotationValue("value","name","PM10");break;case "5":setExcelAnnotationValue("value","name","CO");break;case "6":setExcelAnnotationValue("value","name","O3");break;case "7":setExcelAnnotationValue("value","name","PM2.5");break;}List<AirQualityRankingResp> list = lrMonitorConcentrationService.rankingAnalysis(airRankingReq);// Step.3 AutoPoi 导出ExcelLoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());mv.addObject(NormalExcelConstants.FILE_NAME, "lr_meteorological_data"); //此处设置的filename无效 ,前端会重更新设置一下mv.addObject(NormalExcelConstants.CLASS, AirQualityRankingResp.class);//update-begin--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------ExportParams exportParams = new ExportParams("空气质量数据排名" + "报表", "导出人:" + sysUser.getRealname(), "空气质量排名");exportParams.setImageBasePath(upLoadPath);//update-end--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------mv.addObject(NormalExcelConstants.PARAMS, exportParams);mv.addObject(NormalExcelConstants.DATA_LIST, list);return mv;}

我这里是根据前端给的name值来确定生成表格的列名为什么,你们根据实际业务场景来进行判断,这里知道怎么用即可

使用反射实现动态修改@Excel的注解属性相关推荐

  1. js中动态修改frame的src属性,frame自己刷新。。。

    弄了半天,结果画蛇添足...:动态修改frame的src属性,然后parent.frame.location.reload()反而错误... 无须自己手工来进行reload() frame会因为src ...

  2. JQuery中如何动态修改input的type属性

    代码如下: 1 jQuery(".member_id").focus(function() { 2 jQuery(this).val(''); 3 }).blur(function ...

  3. POI——动态修改Excel模板下拉框

    需求: 在导入页面放置了的Excel模板,最开始内容是写死的.现在需要将数据库的数据动态的加载到excel模板的下拉框中.使用的为poi.xssf 相关jar包 poi-3.10-FINAL-2014 ...

  4. html script src属性,动态修改script标签中的src属性存在的问题

    今天某个同事遇到一个诡异的问题,问题描述如下: 需求:通过脚本动态修改script标签的src来载入一段外部脚本并执行 实现方式(#1): document.getElementById('exter ...

  5. 利用反射动态修改 EasyPoi 导出Excel表格标题名称

    EasyPoi 动态修改表格标题名称 需求 代码实现 1.实体类 @Data @Accessors(chain = true) public class AccountVO implements Se ...

  6. 通过反射动态修改自定义注解属性值

    通过反射动态修改自定义注解属性值 java/lang/reflect 这个包下面都是Java的反射类和工具. Annotation 注解,也是位于这个包里的. 注解自从Java 5.0版本引入后,就成 ...

  7. 记一次AOP+反射动态修改注解值成功后注解没有生效

    记一次AOP+反射动态修改注解值成功后注解没有生效 最近重新看了一下反射,突发奇想,在运行的时候在不同的方法上放入不同的注解值,然后获取到注解值进行修改.于是拿了hirbernate的@Validat ...

  8. 根据excel列动态创建mysql表_根据数据库字段动态生成excel模版下载,上传模版获取数据存入数据库(poi 反射)...

    环境:mysql5.7.28 java8 Spring boot 2.2.4 mybatis-plus3.10 动态:根据需求,用户可以选择对应的字段生成excle模版 下载 poi 反射:poi是e ...

  9. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

最新文章

  1. HttpClient 详解一《C#高级编程(第9版)》
  2. pc端WINCE的安装包
  3. 如何在Cocos2D游戏中实现A*寻路算法(五)
  4. SQLServer链接服务器至Oracle
  5. Python中文问题
  6. opencv画框返回坐标 python_20行Python代码实现视频字符化
  7. PAT (Basic Level) Practice1009 说反话
  8. 对比学习Python实现
  9. 推荐克莱夫·汤普森《天才程序员》
  10. android设备连接打印机,【Android快讯】教你通过Android设备直接连接打印机打印文件...
  11. [转]论window和Linux之长短
  12. 软件开发培训学校四大培训标准,引领行业标杆
  13. google浏览器缓存文件在哪里
  14. 曾用心并深度参与的一款游戏今天发布了关服通知,回顾一下我最初的工作日报
  15. JavaScript面试题汇总
  16. SCM供应链系统有什么价值?
  17. Linux使用7z压缩软件,解压到指定文件夹
  18. 为什么引入非线性激励函数?
  19. C++学生信息管理系统(含文件流)部分心得含源码
  20. MVC三层架构简单理解

热门文章

  1. 通过ip反查mac地址
  2. spring项目如何升级mysql包_SpringBoot项目版本升级:从1.5.3升级到2.1.8版本
  3. ibm服务器安装aix系统,在aix下安装ibm websphere MQ 7.0
  4. VB.NET EXCE 操作(打开)
  5. 启动不了argis的license manager
  6. reduce()函数
  7. alu和mdr位数相等吗_计算机组成原理复习
  8. 借壳上市的标准和条件
  9. 云原生下的灰度体系建设,mybatis执行流程面试题
  10. 拜日式精准引导词_瑜伽拜日式全套引导词