EasyExcel注解方式导出数据过程解析

摘要:
具体使用示例链接:Yuque EasyExcelhttps://www.yuque.com/easyexcel/doc/write示例代码:publicclassStudentExportDto{@ExcelProperty(值={“学生信息”,“name”},索引=0)privateStringname@ExcelProperty

具体使用示例链接:语雀 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注解方式导出数据过程解析第1张

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()方法调用

免责声明:文章转载自《EasyExcel注解方式导出数据过程解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转分享MAC office2016 安装及激活linux的flock命令(文件锁)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

极验验证码破解之selenium

大家好。我是星星在线,我又来了。今天,我给大家带来极性验证码的硒裂解方法。你有点兴奋吗?你们等不及了。让我们直奔主题。首先,随机找到一个特征点,检查元素,看它是否位于div元素,然后查看它后面的位置。距离已确定。以下是移动硒的大量模拟操作。我们只需要确认需要哪些接口。...

说说接口封装

今天,我为同事封装了一个接口。当谈到接口封装时,有很多关于它的讨论。在很多情况下,说一个服务好,一个服务坏,实际上是在吐槽服务团队之外暴露的界面质量。无论哪种语言,抽象的封装接口都由一个函数名、几个参数和几个返回值组成。总之,参数不应该被封装……我们在内部尝试接口_Catch不会抛出异常,所有信息都将以错误代码的形式返回。就php而言,建议进行异常处理。...

登陆脚本

#!' num_ count+=1其他:lock_ input(用户名)#############1##########_###!...

svn文件冲突,树冲突详解

文件冲突当两名或更多开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。在此案例中,使用冲突编辑对话框中的删除按钮进行清理并将冲突标记为已解决。Foo.c被标记为删除并且产生一个树冲...

The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

修改jre中的这个文件:/java/jdk1.8/jre/lib/security/java.securityjdk.tls.legacyAlgorithms直接改成下面的这个:jdk.tls.legacyAlgorithms=SSLv3,RC4,DES,MD5withRSA,DHkeySize˂1024,ECkeySize˂224,anon,NULL,in...

用VBA去除Excel工作表保护密码

今天帮同事解决个EXCEL问题,现记在这,以作备忘现象:想要修改保护单元格的内容,在使用“工具”菜单“保护”子菜单的“撤消工作表保护”命令,这时要求输入密码。"ExitSubEndIfFori=65To66:Forj=65To66:Fork=65To66Forl=65To66:Form=65To66:Fori1=65To66Fori2=65To66:Fori...