Java EasyExcel动态修改注解

news/2025/1/9 0:04:54/

Java EasyExcel动态修改注解

ASelince

 


实现:

动态修改注解工具类:
    public void modifyFiled(Class clazz, Consumer<Map> consumer, String fieldName) throws Exception {
        //获取需要修改的属性
        Field field = clazz.getDeclaredField(fieldName);
        //获取注解
        ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
        //生成代理类对象
        InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);
        Field annotationValues = invocationHandler.getClass().getDeclaredField("memberValues");

        annotationValues.setAccessible(true);
        Map map = (Map) annotationValues.get(invocationHandler);
        consumer.accept(map);
    }

导出Excel实体类:
@Data
@ColumnWidth(16)
@HeadRowHeight(57)
public class FiveAchievementScoreExcel implements Serializable {

    private static final long serialVersionUID = 1L;

    @ExcelProperty(index = 0, value = {"{%s}", "系统编号"})
    private String id;

    @ColumnWidth(7)
    @ExcelProperty(index = 1, value = {"{%s}", "序号"})
    private Integer reportNo;

    @ColumnWidth(36)
    @ExcelProperty(index = 2, value = {"{%s}", "项目名称"})
    @ApiModelProperty(value = "成果名称")
    private String achievementName;

    @ExcelProperty(index = 3, value = {"{%s}", "推荐值"})
    private Integer recommendIndex;
}


业务实现
    public void reBuildExcelPropertyValue(Class<?> clazz, String title) throws Exception {

        Field[] exportFields = clazz.getDeclaredFields();
        for (Field field : exportFields) {

            ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
            if (annotation != null) {

                String[] value = annotation.value();

                if (StringUtils.startsWith(value[0], "{") && StringUtils.endsWith(value[0], "}")) {

                    modifyFiled(FiveAchievementScoreExcel.class, map -> {
                        map.put("value",
                                new String[]{StringUtils.replaceEach(String.format(value[0], title),
                                        new String[]{"{", "}"},
                                        new String[]{"", ""}),
                                        value[1]});
                    }, field.getName());
                }
            }
        }
    }


代码调用
 excelUtil.reBuildExcelPropertyValue(FiveAchievementScoreExcel.class, activityName);
 

private static void replaceExcelPropertyValue(Class<?> clazz, String fieldName, String fieldValue) {//获取fieldField filed = null;try {filed = clazz.getDeclaredField(fieldName);filed.setAccessible(true);//获取注解ExcelProperty annotation = filed.getAnnotation(ExcelProperty.class);InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues");memberValues.setAccessible(true);Map<String, Object> map = (Map<String, Object>) memberValues.get(invocationHandler);String[] valueArr = {fieldValue};map.put("value", valueArr);System.out.println(JSON.toJSONString(map.get("value")));} catch (Exception e) {System.out.println(e.getMessage() + "  "  + e);}
}public static void main(String[] args) {Class<AftersaleExcel> aftersaleExcelClass = AftersaleExcel.class;//获取fieldField filed = null;String fieldName = "orderSourceStr";try {filed = aftersaleExcelClass.getDeclaredField(fieldName);System.out.println(filed.getName());filed.setAccessible(true);//获取注解ExcelProperty annotation = filed.getAnnotation(ExcelProperty.class);InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);System.out.println(invocationHandler.getClass().getName());Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues");System.out.println(memberValues.getName() + "------------------");memberValues.setAccessible(true);Map<String, Object> map = (Map<String, Object>) memberValues.get(invocationHandler);String[] valueArr = {"oldvalue001"};map.put("value", valueArr);System.out.println(JSON.toJSONString(map.get("value")));} catch (Exception e) {throw new RuntimeException(e);}replaceExcelPropertyValue(aftersaleExcelClass, fieldName, "newValue001");try {filed = aftersaleExcelClass.getDeclaredField(fieldName);filed.setAccessible(true);//获取注解ExcelProperty annotation = filed.getAnnotation(ExcelProperty.class);InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues");memberValues.setAccessible(true);Map<String, Object> map = (Map<String, Object>) memberValues.get(invocationHandler);System.out.println(JSON.toJSONString(map.get("value")));} catch (Exception e) {throw new RuntimeException(e);}
}

 


http://www.ppmy.cn/news/705599.html

相关文章

SpringBoot2+Vue2实战(九)集成Echarts

Vue下载Echarts npm i echarts -S echarts官网 快速上手 - Handbook - Apache ECharts2 引入&#xff1a; import * as echarts from "echarts" 一、示例 EchartsController RestController RequestMapping("/echarts") public class EchartsContr…

【C语言督学训练营 第十六天】考研中常考的排序大题(上)---- 冒泡排序、插入排序、快速排序

文章目录 前言经典的冒泡插入排序快速排序 前言 今天要介绍的部分是排序算法&#xff0c;在很久很久之前学习过十大排序&#xff0c;当时自我感觉非常良好&#xff0c;知道今天才知道我认为的大错特错。有些排序算法会考代码题&#xff0c;有些只会考小题只需要理解思想即可&a…

软件测试必备技能有哪些?

第一步&#xff0c;测试基础&#xff1a; 测试基础是软件测试最最最重要的部分&#xff0c;只要你是做测试&#xff0c;不管是什么测试&#xff0c;测试的基础、理论知识都是必须学会的。大概就包括&#xff1a;测试计划编写、设计测试用例、编写测试报告、编写BUG报告单、跟踪…

计算机教师专业技能测试包括哪些内容,教师面试综合能力测试和专业技能测试是指什么?主要包括哪些内容?...

教育教学能力测试包括&#xff1a;专业知识和能力、教育教学内容、教学设计、教学技能、自我评价和综合表现(包括仪表与心理素质)。 基本素质和综合能力测试包括&#xff1a; 1、教育学、教育心理学、教学法等的基础理论、基本知识及与教育相关的法律知识; 2、专业(学科)理论知…

【安全专业能力】关于一个安全人员必须要学会的技能

文章目录 前言技能分类1. 安全管理类知识和技能1&#xff09;法律法规2&#xff09;认证 2. 安全技术类知识和技能1&#xff09; 物理环境安全2&#xff09; 网络安全3&#xff09; 系统安全4&#xff09; 应用安全5&#xff09; 数据安全6&#xff09; 终端安全7&#xff09; …

对mysql专业技能描述_软件技术专业个人技能怎么写

个人技能(案例一) 1、熟练掌握基于C#语言.NET框架下的WEB和WinForm应用程序的开发&#xff0c;具有清晰的面向对象思想 2、熟练掌握用于WEB开发的ASP.NET、DIVCSS、JS、XML、WebServic等技术。 3、熟练掌握用于WinForm应用程序开发的GDI&#xff0c;IO&#xff0c;网络编程&…

湖北职业高考计算机专业对口的学校有哪些,湖北技能高考能进哪些专科学校

下面是湖北技能高考考生在高职高专批次能够填报的院校名单。技能考试成绩和高考成绩达到高职高专控制线后可以选择填报这些院校。 技能高考考生院校计划按机械类、电气电子类、计算机类、建筑技术类、旅游类、农学类、财经类、学前教育专业、护理专业、汽修类等10大类分类公布。…

计算机专业知识技能名词,学习计算机知识必须懂得50个专业术语

来到Qi9电脑知识网的朋友一定都想学习一些计算机知识,但是,很多的朋友都因为一些电脑的专业术语所头疼,许多的电脑硬件术语缩写不认识、计算机术语不认识等等,这些都阻拦了我们学习计算机知识的步伐。为此,小编特地总结了一些学习计算机知识时常用的必须知道的50个专业术语…