EasyExcel导出,自定义Converter解决LocalDateTime、LocalDate时间转换
EasyExcel不支持LocalDate,和LocalDateTime接收数据
报错异常:Cannot find 'Converter' support class LocalDate
解决方式:建立Convert时间转换类
以下代码为实现
// BaseConvert 通用类
public abstract class BaseConverter <T> implements Converter<T> { private Class<T> clazz; // 子类传入class,接收LocalDate.class,LocalDateTime.class public BaseConverter(Class<T> clazz) { this.clazz = clazz; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public Class supportJavaTypeKey() { return clazz; } @Override public T convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { // LocalDateTime 时间转换 if (cellData.getData() instanceof LocalDate) { if (cellData.getType().equals(CellDataTypeEnum.NUMBER)) { LocalDate localDate = LocalDate.of(1900, 1, 1); localDate = localDate.plusDays(cellData.getNumberValue().longValue()); return (T) localDate; } else if (cellData.getType().equals(CellDataTypeEnum.STRING)) { return (T) LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); } else { return null; } } // LocalDateTime 时间转换 if (cellData.getData() instanceof LocalDateTime) { return (T) LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } return null; } @Override public CellData convertToExcelData(T o, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { if (o instanceof LocalDate) { // todo 此处为伪代码o.String转LocalDate LocalDate localDate = DateUtil.strToLocalDate(o.toString(), "yyyy-MM-dd"); return new CellData<>(localDate.toString()); } if (o instanceof LocalDateTime) { // todo 同上,string转LocatDateTime } return new CellData<>(o.toString()); } }
// 子类
public class LocalDateConverter extends BaseConverter<LocalDate> { public LocalDateConverter() { super(LocalDate.class); } }
// 使用
EasyExcel.write() // 日期转换器 .registerConverter(new LocalDateConverter())
// 时间转换器 .registerConverter(new LocalDateTimeConverter())