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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM