easyexcel
easyexcel copied to clipboard
不创建对象用String接收日期类型数据异常
建议先去看文档
触发场景描述
不创建对象自定义监听器来读取Excel文件,指定了返回类型为String,期望获取Excel单元格内显示的字符串,但是返回的是日期类型的字符串,而非单元格内显示数据
读取入口
ExcelHeaderReadListener listener = new ExcelHeaderReadListener();
EasyExcel.read(file,listener).useDefaultListener(true).sheet(0).doRead();
自定义监听器
package org.example.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Collections;
import java.util.Map;
public class ExcelHeaderReadListener extends AnalysisEventListener<Map<Integer, String>> {
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println(headMap);
}
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
System.out.println(integerStringMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}
提示的异常或者没有达到的效果
期望获取到的字符串是1990年10月10日
这个是对应的Excel文件 带时间Excel文件.xlsx
应该是默认的单元格数据转换器的锅,你试试 自定义转换器,可参考这几个类
com.alibaba.excel.converters.date.DateStringConverter
com.alibaba.excel.converters.date.DateNumberConverter
com.alibaba.excel.converters.date.DateDateConverter
重写StringNumberConverter类的convertToJavaData方法:
@Override
public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if (CellDataTypeEnum.DATE == cellData.getType() || !"General".equals(cellData.getDataFormatData().getFormat())){
DataFormatData dataFormatData = cellData.getDataFormatData();
dataFormatData.setFormat(日期格式);
}
return super.convertToJavaData(cellData, contentProperty, globalConfiguration);
}