1 Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.8</version>
</dependency>
2 LocalDateConverter
LocalDate类型转换器。
package com.convert;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.*;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* LocalDate类型转换器
*/
@Component
public class LocalDateConverter implements Converter<LocalDate> {
@Override
public Class<LocalDate> supportJavaTypeKey() {
return LocalDate.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public LocalDate convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty
, GlobalConfiguration globalConfiguration) throws Exception {
return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
@Override
public CellData convertToExcelData(LocalDate localDate, ExcelContentProperty excelContentProperty
, GlobalConfiguration globalConfiguration) throws Exception {
return new CellData<>(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
}
3 调试代码
/**
* 调试自定义Convert
*
* @param response
*/
@GetMapping("/customConvert")
public void customConvert(HttpServletResponse response) throws IOException {
List<List<Object>> sheetDataList = new ArrayList<>();
List<Object> rowList = new ArrayList<>();
rowList.add(LocalDate.parse("2021-07-30", DateTimeFormatter.ofPattern("yyyy-MM-dd")));
sheetDataList.add(rowList);
response.addHeader("Content-Disposition", "filename=test.xlsx" );
//设置类型,扩展名为.xls
response.setContentType("application/vnd.ms-excel");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
//加载类型转换器
.registerConverter(new LocalDateConverter()).build();
WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
excelWriter.write(sheetDataList, writeSheet);
//千万别忘记finish 会帮忙关闭流
excelWriter.finish();
}