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便捷生成二维码并使用Excel

    第一步生成图片字节数组输出流 第二步字节数组输出流存入excel 使用的是easyexcel和hutool工具便捷快速开发 导出类信息 @ContentRowHeight(100) @ColumnWidth(100/6) 这两个注解是条件excel行列大小,可以自行调整 EasyExcel 会根据这个实体类来生成表格,可以去官网查看注解注释掉其中的某

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

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

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

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

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

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

    2024年02月03日
    浏览(43)
  • 反射机制-体会反射的动态性案例(尚硅谷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日
    浏览(36)
  • 【JAVA】单元测试、反射、注解、动态代理

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

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

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

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

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

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

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

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

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

    2024年02月13日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包