起因:

在项目开发过程中有使用到LocalDate类型(LocalDateTime同理)的数据进行存储日期,但是在使用easyExcel导出数据时遇到了报错,导致导出失败,报错信息如下

Can not find 'Converter' support class LocalDate.
com.alibaba.excel.exception.ExcelWriteDataConvertException: Can not find 'Converter' support class LocalDate.

 报错原因:

使用easyExcel将LocalDate类型的数据写入Excel中时(读取时也会报同样的错误),没有找到合适的转化器,无法转化LocalExcel类型的数据,所以出现该错误,所以我们需要自定义一个转化器,对LocalDate类型的数据进行处理。

解决方式:

1. 创建一个 LocalDateConverter 类,实现 com.alibaba.excel.convert.Converter 接口:

在该类中重写了convertToJavaData(Excel读取到java中)、convertToExcelData(Java中的数据写入到Excel)这两个方法,详细代码如下

package com.wedu.modules.contract.utils.excel;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * LocalDateStringConverter
 *
 * @author: X7
 * @date: 2023/8/21 9:26
 */

public class LocalDateStringConverter implements Converter<LocalDate>{
    @Override
    public Class supportJavaTypeKey() {
        return LocalDateTime.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public LocalDate convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration)  {
        return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
    @Override
    public WriteCellData<?> convertToExcelData(LocalDate localDate, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        WriteCellData cellData = new WriteCellData();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String cellValue;
        cellValue=formatter.format(localDate);
        cellData.setType(CellDataTypeEnum.STRING);
        cellData.setStringValue(cellValue);
        cellData.setData(cellValue);
        return cellData;
    }
}

通过上述代码在导出数据时可以将 LocalDate 类型中的数据转化为 yyyy-MM-dd 的格式导入到Excel中,以及导入数据时解析 yyyy-MM-dd 格式的数据将其转化为 LocalDate 类型的数据。

2. 在实体类中的对应的LocalDate类型数据的@ExcelProperty中引入转化器路径

/**
 * 合同结束时间
 */
@ExcelProperty(value = "合同结束时间",converter = LocalDateStringConverter.class)
private LocalDate endTime;

 

GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io` 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐