Spring Boot 项目导出 Excel 表格
引入的依赖:
com.alibaba easyexcel2.2.6
启动服务,调用接口,成功导出 Excel文件,但是文件没有数据,且报错:Can not find ‘Converter‘ support class Date.
2. 原因分析:点击报错,定位到创建时间字段,剖析报错原因:使用 easyexcel 导出 Excel 表格时候,默认不支持 DateTime 日期格式,所以需要指定 DateTime 类型的字段的日期格式。
3. 问题解决:解决方法一:
添加注解:
@ColumnWidth(20)
@ExcelProperty(value = "创建日期")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
但是,需要注意的是时间为 null 时(即数据库中该字段存在为空的数据),这种方法就行不通!导出的 Excel 文件依然没有任何内容。
解决方法二(推荐):
1、自定义一个转换器 LocalDateStringConverter
package com.example.excel.utils; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.GlobalConfiguration; import com.alibaba.excel.metadata.property.ExcelContentProperty; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateStringConverter implements Converter{ @Override public Class supportJavaTypeKey() { return LocalDateTime.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } @Override public CellData convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String format = formatter.format(localDateTime); return new CellData(format); } }
2、修改字段类型为 LocalDateTime 日期格式,并正确添加注解:
@ColumnWidth(20)
@ExcelProperty(value = "创建日期", converter = LocalDateStringConverter.class)
private LocalDateTime createTime;
3、重启服务
@PostMapping("/excelExport")
public void excelExport(HttpServletResponse response, Driver driver) {
List list = driverService.list(new QueryWrapper<>(driver));
List driverExcel = DriverExcelWrapper.build().listVO(list);
ExcelUtil.export(response, "司机基础信息导出表", "司机基础信息导出表", driverExcel, DriverExcelVO.class);
}
测试接口,成功导出 Excel 文件~
注意:有一个细节也需要注意,如果使用到 wrapper 转换实体,还需要修改对应的实体类中的时间类型为 LocalDateTime,否则导出来的 Excel 表格里面是没有对应的时间数据的!就像这样:
修改对应的实体类的时间类型:
@TableField("create_time")
private LocalDateTime createTime;
再次导出 Excel 表格,成功~~~~



