zoukankan      html  css  js  c++  java
  • EasyExcel注解方式导出数据过程解析

    具体使用示例链接:语雀 EasyExcel https://www.yuque.com/easyexcel/doc/write

    示例代码

    public class StudentExportDto {
    
        @ExcelProperty(value = {"学生信息", "姓名"} ,index = 0)
        private String name;
    
        @ExcelProperty(value = {"学生信息", "年龄"} ,index = 1)
        private Integer age;
    
        @DateTimeFormat(value="yyyy-MM")
        @ExcelProperty(value = {"学生信息", "出生年月"} ,index = 2)
        private Date birthday;
    
        @NumberFormat(value="#.00")
        @ExcelProperty(value = {"学生信息", "数学分数"} ,index = 3)
        private Double mathScore;
    
        @NumberFormat(value="#.00")
        @ExcelProperty(value = {"学生信息", "语文分数"} ,index = 4)
        private Double chineseScore;
    
        @NumberFormat(value="#.00")
        @ExcelProperty(value = {"学生信息", "平均分数"} ,index = 5)
        private Double averageScore;
    }

    测试

    public void test() throws FileNotFoundException {
            OutputStream out = new FileOutputStream("E:\2007.xlsx");
            try {
                List<StudentExportDto> listData = new ArrayList<>();
                StudentExportDto dto = new StudentExportDto("张三", 13, new Date(),
                        56.5, (double) 98, (56.5+98)/2);
                listData.add(dto);
                ExcelWriter writer = EasyExcel.write(out, StudentExportDto.class)
                        .excelType(ExcelTypeEnum.XLSX)
                        .build();
                WriteSheet writeSheet = EasyExcel.writerSheet("学生信息").build();
                writer.write(listData, writeSheet);
                writer.finish();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    EasyExcel的注解含义解释

    @ExcelIgnore

    这个注解标记在类属性上,属性会在导出时被忽略

    @ExcelIgnoreUnannotated

    标记在类上,见名知意,
    在解析类的所有easyExcel属性注解时,忽略没有注解的类
    即没有注解的属性被忽略导出,这个注解不常用,直接用@ExcelIgnore注解就可以了

    @ExcelProperty

    这个是用来初始化属性列的配置,
    比如配置类型转换器Converter,配置列的标题
    列对应的index排序大小
    @ExcelProperty(value="列标题", index=1, converter=XXConverter.class)

    @NumberFormat

    这个数值格式化注解时内置转换器使用,当没有配置自定义转换器converter时
    会根据field.getType类型+ String匹配内置的转换器。如 DoubleStringConverter

    @ExcelProperty没有设置converter
    而属性上有@NumberFormat注解,默认数值类型会被转换成字符串,
    默认操作是会添加一个默认转换器DoubleStringConverter

    @DateTimeFormat

    这个注解时内置转换器使用
    DateNumberConverter: 这个是当属性类型为Date,excel中类型为CellDataTypeEnum.NUMBER时会调用这个转换器
    DateStringConverter:这个也是,当excel中类型为CellDataTypeEnum.STRING时调用这个

    下面这些是用来设置excel表样式用了
    @ColumnWidth
    @ContentFontStyle
    @ContentLoopMerge
    @ContentRowHeight
    @ContentStyle
    @HeadFontStyle
    @HeadRowHeight
    @HeadStyle
    @OnceAbsoluteMerge

    注解导出数据过程

    easyexcel注解导出excel数据
    beforeRowCreate    行数据创建之前
        RowWriteHandler.beforeRowCreate()方法调用
    createRow    行row创建
    afterRowCreate 行数据创建之后
        RowWriteHandler.afterRowCreate()方法调用
    
    写入List数据或者其他JavaObject数据
            CellWriteHandler.beforeCellCreate() 创建Cell前
            创建行
            CellWriteHandler.afterCellCreate() 创建cell后
            调用converterAndSet进行类型转换
                在这里转换时,如果这一行数据是List类型对象,则做基础数据转成excel类型
                如果一行数据是其他Object对象,将对象转成map,
                然后通过@ExcelProperty注解配置的Converter,DateTimeFormatProperty和NumberFormatProperty
                将对应Field属性值进行转换和格式化生成excel的CellData数据设置到单元格中
            CellWriteHandler.afterCellDataConverted() 数据格式转换后
            设置到单元格
        
    afterRowDispose    行数据写入row关闭后
        RowWriteHandler.afterRowDispose()方法调用
    作者:海绵般汲取
    出处:https://www.cnblogs.com/gne-hwz/
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
  • 相关阅读:
    0001_two_sum
    shell 命令
    先验概率,后验概率,似然函数,最大似然估计【待整理】
    numpy学习笔记
    python: __slots__ 解析 (待整理)
    ubuntu,win7双系统问题
    安装sogou输入法
    pytorch安装
    稀疏向量的一些内容
    extern c
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/14479634.html
Copyright © 2011-2022 走看看