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

发布时间 2023-04-21 20:40:42作者: binbinx

 https://blog.csdn.net/qq_44749491/article/details/127879946

一、概述

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

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

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

可以作用于字段上。

2.1 注解参数
名称 默认值 描述
value 空 用于匹配excel中的头,必须全匹配,如果有多行头,会匹配最后一行头
order Integer.MAX_VALUE 优先级高于value,会根据order的顺序来匹配实体和excel中数据的顺序
index -1 优先级高于value和order,会根据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;
}

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());
}

}

 

@Getter
@Setter
@EqualsAndHashCode
public class DemoData {

// 忽略这个字段,不写入Excel当中
@ExcelIgnore
private String ignore;
}