easyExcel导出自定义内容填充
首先,我需要导出的实体类,有两个字段,在线状态:0-在线|1-离线,支付状态:0-未支付|1-支付成功|2-支付失败,数据库查询是相关的数字,需要转换成对应的值。
1、 Converter
新建自定义的Converter,实现Converter接口
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class CustomerConverter implements Converter<String> {
public Map<String, Map<String,String>> map = null;
public void init(){
Map<String,String> lineStatusMaps= new HashMap<>();
lineStatusMaps.put("0","在线");
lineStatusMaps.put("1","离线");
Map<String,String> paymentStatusMaps= new HashMap<>();
paymentStatusMaps.put("0","未支付");
paymentStatusMaps.put("1","支付成功");
paymentStatusMaps.put("2","支付失败");
this.map = new HashMap<>();
map.put("linestatus",lineStatusMaps);
map.put("paymentStatus",paymentStatusMaps);
}
@Override
public Class supportJavaTypeKey() {
return null;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return null;
}
这个是转换成java数据时调用,也就是导入
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
//这个是导出为Excel方法时会调用
@Override
public CellData convertToExcelData(String s, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
init();
//获取列名,因为我有两个字段,对应的不同的值,所以这里需要取对应的map
//fieldName 对应属性名称
String fieldName = excelContentProperty.getField().getName();
Map<String,String> ansMap = map.get(fieldName);
if(ansMap.containsKey(s)){
return new CellData(ansMap.get(s));
}else {
return new CellData("");
}
}
}
2、 实体类
在对应的字段上面注释中加上converter,将需要转的字段都加上,这里只展示一个
@ExcelProperty(value = {"大数据库交易信息", "在线状态"},order = 150,converter = CustomerConverter.class)
@ColumnWidth(16)
@ApiModelProperty("是否离线交易 0-在线 1-离线")
private String linestatus;
3、 生成excel
ExcelWriter excelWriter = EasyExcel.write(outputStream, clazz).build();
WriteSheet writeSheet = EasyExcel.writerSheet(1,fileName).build();
excelWriter.write(list,writeSheet);
excelWriter.finish();