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