java使用@interface和反射来动态生成excel

这篇具有很好参考价值的文章主要介绍了java使用@interface和反射来动态生成excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、对象类上搞注解
public class ReportExecuteDetailDto {

    // 项目信息
    private String regionCode;         // 大区编号
    @ExcelColumn(order = 0, title = "大区")
    private String regionName;         // 大区名称
    
    @ExcelColumn(order = 14, title = "行申请金额", dataType = ExcelColumn.FieldType.Number)
    private BigDecimal detailApplyAmount;    // 行申请金额
}
2、创建注解类
package cn.com.ibm.portal.subject.annotation;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface ExcelColumn {
    /**
     * 标注该属性的顺序
     * @return 该属性的顺序
     */
    int order();

    /**
     * execl标题
     * @return
     */
    String title();

    /**
     * 日期数据的格式化格式
     * @return
     */
    String format() default "";

    /**
     * 单元格宽度
     * @return
     */
    int width() default 30;

    /**
     *  是否设置默认值:字符串默认为""
     *  Number:0.00
     *  Date: now
     *  Percent: 0.00%
     */
    boolean hasDefault() default false;

    /**
     * 数据类型
     * @return
     */
    FieldType dataType() default FieldType.String;

    public static enum FieldType {
        /*
            字符串
         */
        String,

        /*
            数值
         */
        Number,

        /*
            日期
         */
        Date,

        /*
            百分比
         */
        Percent;
    }
}
3、获取属性
private static List<Field> getExcelColumnAnnotation(Class clazz) {
        // 用来存放所有的属性域
        List<Field> fieldList = Lists.newArrayList();
        // 过滤带有注解的Field
        for (Field f : clazz.getDeclaredFields()) {
            if (f.getAnnotation(ExcelColumn.class) != null) {
                fieldList.add(f);
            }
        }
        // 这个比较排序的语法依赖于java 1.8
        fieldList.sort(Comparator.comparingInt(
                m -> m.getAnnotation(ExcelColumn.class).order()
        ));
        return fieldList;
    }
4、使用
private static List<PoiCellVo> genExecuteReportTitleData(ReportExecuteDto dto, int startRow, int startCol) {
        List<PoiCellVo> result = Lists.newArrayList();
        //添加固定标题
        int fixStartRow = startRow;
        int fixStartCol = startCol;

        // 根据注解获取标题
        List<Field> annotationList = getExcelColumnAnnotation(ReportExecuteDetailDto.class);

        PoiCellVo fixVo = null;
        ExcelColumn annotation = null;
        for (Field field : annotationList) {
            annotation = field.getAnnotation(ExcelColumn.class);
            if (annotation == null) {
                continue;
            }
            fixVo = new PoiCellVo(annotation.title(), fixStartRow, fixStartCol, 1, 1, headerColor, (short) annotation.width(), (short) 0);
            result.add(fixVo);
            fixStartCol++;
        }

        return result;
    }文章来源地址https://www.toymoban.com/news/detail-666210.html

到了这里,关于java使用@interface和反射来动态生成excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java中使用POI生成Excel并导出

    注:本文章中代码均为本地Demo版本,若后续代码更新将不会更新文章 根据从数据库查询出的数据,将其写入excel表并导出 我的想法是通过在实体属性上写自定义注解的方式去完成。因为我们在代码中可以通过反射的方式去获取实体类中全部的注解及属性名称等等。我们可以

    2024年02月16日
    浏览(45)
  • 【Java】使用 HSSFWorkbook 生成 Excel 并导出步骤

    1、含义:excel的工作簿 2、创建工作簿 3、创建 excel 的工作表 4、创建单元格样式 1、含义:excel 的工作表 2、创建行(第一行从 0 开始) 3、设置单元格宽度 1、含义:单元格样式 2、属性设置 1、含义:excel 的行 2、创建行对应的单元格(第一个单元格从 0 开始) 3、属性设置

    2024年02月03日
    浏览(45)
  • Java动态代理、反射

    动态代理就是无侵入式的给代码增加新的功能,通过接口保证后面的对象和代理需要实现同一个接口,接口中就是被代理的所有方法,代理里面就是对象要被代理的方法。 因为一个对象觉得自己身上的功能太多,就会将一部分功能代理出去,对象中什么方法想要被代理,在代

    2024年02月11日
    浏览(48)
  • Java反射和动态代理

    反射允许对封装类的成员变量、成员方法和构造方法的信息进行编程访问 成员变量:修饰符、名字、类型、get/set值 构造方法:修饰符、名字、形参、创建对象 成员方法:修饰符、名字、形参、返回值、抛出的异常、获取注解、运行方法 获取class对象 Class.forName(“全类名”

    2024年02月03日
    浏览(54)
  • 反射机制-体会反射的动态性案例(尚硅谷Java学习笔记)

    // 举例01 public class Reflect{ } 案例:榨汁机榨水果汁,水果分别有果(com.reflect.Apple)、香蕉(Banana)、桔子(Orange)等。 效果如图。 提示: 1、声明(Fruit)水果接口,包含榨汁抽象方法: void squeeze(); /skwi:z/ 2、声明榨汁机(Juicer),包含运行方法: public void run(Fruit f),方法体中,调用f的榨汁方

    2024年02月11日
    浏览(45)
  • 【JAVA】单元测试、反射、注解、动态代理

    @Test 测试方法 @Before 用来修饰实例方法,该方法会在每一个测试方法执行之前执行一次。 @After 用来修饰实例方法,该方法会在每一个测试方法执行之后执行一次。 @Before Class 用来静态修饰方法,该方法会在所有测试方法之前只执行一次。 @After Class 用来静态修饰方法,该方法

    2024年02月11日
    浏览(41)
  • java eazyexcel 实现excel的动态多级联动下拉列表(1)使用名称管理器+INDIRECT函数

    将数据源放到一个新建的隐藏的sheet中 将选项的子选项的对应字典设置到名称管理器中(名称是当前选项的内容,值是他对应的子菜单的单元格范围,在1里面的sheet中) 子菜单的数据根据INDIRECT函数去左边那个单元格获取内容,根据内容去名称管理器中获取字典的key,也就是

    2024年01月22日
    浏览(49)
  • Day20-【Java SE高级】单元测试 反射 注解 动态代理

    就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。 1. 咱们之前是如何进行单元测试的?有啥问题? 只能在main方法编写测试代码,去调用其他方法进行测试。 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试。 无法得到测试的报告,需要程

    2024年04月17日
    浏览(50)
  • 使用 Python Selenium 提取动态生成下拉选项

    在进行网络数据采集和数据分析时,处理动态生成的下拉菜单是一个常见的挑战。Selenium是一个强大的Python库,可以让你自动化浏览器操作,比如从动态生成的下拉菜单中选择选项。这是一个常见的网页爬虫和数据收集者面临的挑战,但是Selenium让它变得简单。 你可以使用

    2024年02月09日
    浏览(51)
  • Java反射机制,动态代理,hook以及在Retrofit源码中的应用

    1.反射的基础知识: Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包