使用easyExcel导入导出LocalDate类型转换问题
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
起因:
在项目开发过程中有使用到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 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)