使用easyExcel导入导出LocalDate类型转换问题

起因:

在项目开发过程中有使用到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;

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值