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