• EasyExcel格式化映射注解和样式注解详解


    一、概述

    使用注解很简单,只要在对应的实体类上面加上注解即可。

    也就是说使用实体类模型来读写Excel文件时,可以通过注解来控制实体类字段和Excel列之间的对应关系。

    二、ExcelProperty

    2.1 作用

    ExcelProperty注解用于匹配excel和实体类字段之间的关系。

    可以作用于字段上。

    2.1 注解参数

    名称默认值描述
    value用于匹配excel中的头,必须全匹配,如果有多行头,会匹配最后一行头
    orderInteger.MAX_VALUE优先级高于value,会根据order的顺序来匹配实体和excel中数据的顺序
    index-1优先级高于valueorder,会根据index直接指定到excel中具体的哪一列
    converter自动选择指定当前字段用什么转换器,默认会自动选择。写的情况下只要实现com.alibaba.excel.converters.Converter#convertToExcelData(com.alibaba.excel.converters.WriteConverterContext) 方法即可

    2.3 使用示例

    @Getter
    @Setter
    @EqualsAndHashCode
    public class DemoData {
        @ExcelProperty("字符串标题")
        private String title;
        
        // 在这个字段前面加上 自定义三个字
        @ExcelProperty(value = "conver的使用", converter = CustomStringStringConverter.class)
        private String convert;
        
        @ExcelProperty(value = "日期标题", index = 3)
        private Date date;
        
        @ExcelProperty(value = "数字标题", index = 5)
        private Double doubleData;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    import com.alibaba.excel.converters.Converter;
    import com.alibaba.excel.converters.ReadConverterContext;
    import com.alibaba.excel.converters.WriteConverterContext;
    import com.alibaba.excel.enums.CellDataTypeEnum;
    import com.alibaba.excel.metadata.data.WriteCellData;
    
    /**
     * 定义一个字符串转换器,需要实现Converter接口并且传递需要转换的泛型
     */
    public class CustomStringStringConverter implements Converter<String> {
        
        // 所支持的java类型
        @Override
        public Class<?> supportJavaTypeKey() {
            return String.class;
        }
    
        // 所支持的Excel枚举类型
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.STRING;
        }
    
        /**
         * 这里读的时候会调用
         * @param context	上下文对象  可以获取当前读的单元格的文字内容
         * @return			格式化后的值
         */
        @Override
        public String convertToJavaData(ReadConverterContext<?> context) {
            return "自定义:" + context.getReadCellData().getStringValue();
        }
    
        /**
         * 这里是写的时候会调用 通常情况可以不用管
         * @return
         */
        @Override
        public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) {
            return new WriteCellData<>(context.getValue());
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    注意点:

    1)关于index

    如果所有字段都不加index的话,默认index会从0开始,最早的声明的字段的名字的index的值就是0。

    之后字段的index就从0开始递增,依次类推。index是几决定了该字段数据会赋值给Excel中的第几列。

    如果不想按这个顺序把数据写到Excel当中。那么就可以手动设置index的值,把字段写到想要的列中去。

    如果index相同,直接会抛出异常,因为程序无法判断这个列放那个字段。

    2)关于order

    indexorder虽然都决定顺序,但是两者语义不同:

    如果orderindex同时使用,index优先占据位置,order再进行排序。

    index=-1的话,使用jJava进行默认排序。

    order的默认值为Integer.MAX_VALUE,其中order的值越小,列越靠前。

    三、ExcelIgnore

    3.1 作用

    默认所有字段都会和excel中对应列去匹配,但是加了这个注解EasyExcel会忽略该字段,使之不写入Excel

    可以作用于字段上。

    3.2 使用示例

    @Getter
    @Setter
    @EqualsAndHashCode
    public class DemoData {
    
        // 忽略这个字段,不写入Excel当中
        @ExcelIgnore
        private String ignore;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    四、ExcelIgnoreUnannotated

    4.1 作用

    默认不管加不加ExcelProperty的注解的所有字段都会参与读写。

    加了@ExcelIgnoreUnannotated注解以后,不加ExcelProperty注解的字段就不会参与读写。

    看起来和@ExcelIgnore注解作用类似,只是用法不同。

    可以作用于类上。

    4.2 使用示例

    @data
    @ExcelIgnoreUnannotated
    public class DemoData {
        @ExcelProperty("字符串标题")
        private String string;
        @ExcelProperty("日期标题")
        private Date date;
        @ExcelProperty("数字标题")
        private Double doubleData;
    	
        private String ignore;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    五、DateTimeFormat

    5.1 作用

    日期转换,用String去接收excel日期格式的数据会调用这个注解,参数如下:

    可以作用于字段上。

    5.2 注解参数

    名称默认值描述
    value参照java.text.SimpleDateFormat书写即可
    use1904windowing自动选择excel中时间是存储1900年起的一个双精度浮点数。
    但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始

    不写use1904windowing这个参数默认就是1900的时间格式,一般也就是使用1900的时间格式

    5.2 使用示例

    @data
    public class DemoData {
        @ExcelProperty("字符串标题")
        private String string;
        
      
        @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
        @ExcelProperty("日期标题")
        private Date date;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    六、NumberFormat

    6.1 作用

    数字转换,用String去接收excel数字格式的数据会调用这个注解。

    可以作用于字段上。

    6.2 注解参数

    名称默认值描述
    value参照java.text.DecimalFormat书写即可
    roundingModeRoundingMode.HALF_UP格式化的时候设置舍入模式

    6.3 使用示例

    @data
    @ExcelIgnoreUnannotated
    public class DemoData {
        @ExcelProperty("字符串标题")
        private String string;
    
        @NumberFormat("#.##%")		// 使用百分比格式格式化这个数字
        @ExcelProperty("数字")
        private Double doubleData;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    七、ColumnWith

    7.1 作用

    设置列宽度。

    可以作用于类或者字段上。

    7.2 注解参数

    @ColumnWith 只有一个参数valuevalue的单位是字符长度,最大可以设置255个字符。

    因为一个excel单元格最大可以写入的字符个数就是255个字符。

    7.3 使用示例

    @data
    public class DemoData {
        @ExcelProperty("字符串标题")
        @ColumnWidth(15)			//设置列宽为15个字符	
        private String string;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注解作用于类上将会设置全部单元格的宽度为15

    注解作用于字段上会设置字段所对应的Excel列的宽度为15

    八、ContentRowHeight

    8.1 作用

    用于设置行高。

    可以作用于类上。

    8.2 注解参数

    只有一个参数value,它的值是Excel文件中的行高。值为-1时代表自动设置行高。

    8.3 使用示例

    @data
    @ContentRowHeight(15)
    public class DemoData {
        @ExcelProperty("字符串标题")
        private String string;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    九、ContentFontStyle / HeadFontStyle

    9.1 作用

    ContentFontStyle:用于设置单元格内容字体格式的注解

    HeadFontStyle :设置标题的字体样式。

    都可以作用于类或者字段上,注解参数也完全一致。

    9.2 注解参数

    名称默认值描述
    fontName“”字体名称
    fontHeightInPoints-1字体高度
    italicBooleanEnum.DEFAULT是否斜体
    strikeoutBooleanEnum.DEFAULT是否设置删除水平线
    color-1字体颜色
    typeOffset-1偏移量
    underline-1是否添加下划线
    bold-1是否加粗
    charsetBooleanEnum.DEFAULT编码格式

    9.3 使用示例

    @data
    public class DemoData {
        // 设置当前列的字体颜色为10(红色)   字体为斜体
        @ContentFontStyle(color = 10, italic = BooleanEnum.TRUE)
        @ExcelProperty("字符串标题")
        private String string;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里的颜色值可以在IndexedColors.RED这个枚举中找到。

    如果是使用代码可以直接IndexedColors.RED.getIndex()设置颜色值,注解的话,只能直接写数字

    十、ContentStyle / HeadStyle

    10.1 作用

    ContentStyle:设置单元格内容样式注解。

    HeadStyle :设置标题样式。

    都可以作用于类或者字段上,注解参数也完全一致。

    10.2 注解参数

    名称默认值描述
    dataFormat-1数据格式
    hiddenBooleanEnum.DEFAULT设置单元格隐藏
    lockedBooleanEnum.DEFAULT设置单元格使用此样式锁定
    quotePrefixBooleanEnum.DEFAULT设在单元格前面增加`符号,数字或公式将以字符串形式展示
    horizontalAlignmentHorizontalAlignmentEnum.DEFAULT设置是否水平居中
    wrappedBooleanEnum.DEFAULT设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
    verticalAlignmentVerticalAlignmentEnum.DEFAULT设置是否垂直居中
    rotation-1设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°
    indent-1设置单元格中缩进文本的空格数
    borderLeftBorderStyleEnum.DEFAULT设置左边框的样式
    borderRightBorderStyleEnum.DEFAULT设置右边框样式
    borderTopBorderStyleEnum.DEFAULT设置上边框样式
    borderBottomBorderStyleEnum.DEFAULT设置下边框样式
    leftBorderColor-1设置左边框颜色
    rightBorderColor-1设置右边框颜色
    topBorderColor-1设置上边框颜色
    bottomBorderColor-1设置下边框颜色
    fillPatternTypeFillPatternTypeEnum.DEFAULT设置填充类型
    fillBackgroundColor-1设置背景色
    fillForegroundColor-1设置前景色
    shrinkToFitBooleanEnum.DEFAULT设置自动单元格自动大小

    10.3 使用示例

    @data
    public class DemoData {
        // 设置单元格的左边框颜色为10(红色)   数据格式为0.00
        @ContentStyle(leftBorderColor = 10, dataFormat = 0.00)
        @ExcelProperty("字符串标题")
        private String string;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里的颜色值可以在IndexedColors.RED这个枚举中找到。

    数据格式的值可以在类com.alibaba.excel.constant.BuiltinFormats的字段BUILTIN_FORMATS_CN中找到

    十一、ContentLoopMerge

    11.1 作用

    用于合并单元格。

    可以作用于字段上。

    11.2 注解参数

    名称默认值描述
    eachRow1用于设置当前列每隔几行合并一次单元格
    columnExtend1用于合并列

    10.3 使用示例

    @data
    public class DemoData {
        // 单前列每隔两行合并一次单元格
        @ContentLoopMerge(eachRow = 2)
        @ExcelProperty("字符串标题")
        private String string;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    【小沐学NLP】Python实现聊天机器人(OpenAI,模型概述笔记)
    用floyd算法求图中任意两点最短距离(matlab)
    解决ubuntu删除文件没释放空间
    Nova 最新高度集成的SoC NT98530用于开发4K@60的IPC产品_AI算法承载硬件_开发实例
    【AI设计模式】02-数据表示-嵌入(Embeddings)模式
    时间复杂度、空间复杂度的学习总结
    什么是Air-gapped test or development environments?
    mybatis-plus根据指定条件批量更新
    什么是Barr-C?
    ElementUI之首页导航+左侧菜单->mockjs,总线
  • 原文地址:https://blog.csdn.net/qq_44749491/article/details/127879946