easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

不创建对象用String接收日期类型数据异常

Open VisionsOfIdiot opened this issue 10 months ago • 3 comments

建议先去看文档

快速开始常见问题

触发场景描述

不创建对象自定义监听器来读取Excel文件,指定了返回类型为String,期望获取Excel单元格内显示的字符串,但是返回的是日期类型的字符串,而非单元格内显示数据 image image

读取入口

        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) {
    }
}

提示的异常或者没有达到的效果

image 期望获取到的字符串是1990年10月10日

VisionsOfIdiot avatar Apr 16 '24 03:04 VisionsOfIdiot

这个是对应的Excel文件 带时间Excel文件.xlsx

VisionsOfIdiot avatar Apr 16 '24 03:04 VisionsOfIdiot

应该是默认的单元格数据转换器的锅,你试试 自定义转换器,可参考这几个类 com.alibaba.excel.converters.date.DateStringConverter com.alibaba.excel.converters.date.DateNumberConverter com.alibaba.excel.converters.date.DateDateConverter

LSL1618 avatar May 10 '24 08:05 LSL1618

重写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);
    }

doublez-ten avatar Jul 22 '24 09:07 doublez-ten