easyexcel 当我的数据用List< Map< String,Object>>填充的时候,Converter 方法如何获取列名

tmb3ates  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(43)

当前输的数据,使用的是List<Map<String,Object>> 来填充的数据,当我用Convert方法的时候
无法在写入数据前,找到对应的列名,对象方式,可以从ExcelContentProperty contentProperty里面获取

但是Map方式好像没办法找到对应的列,我需要去 对指定列的时间类型,来指定数据格式,用对象的方式可以自定义,但是map的方式 有对应的方法么

mftmpeh8

mftmpeh81#

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.ExcelContentProperty;
import com.alibaba.excel.metadata.property.ExcelContentPropertyIndex;
import com.alibaba.excel.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class CustomExcelListener extends AnalysisEventListener<Map<Integer, String>> {

    private List<String> errorMessages = new ArrayList<>();

    @Override
    public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
        // 获取列头信息
        List<ExcelContentProperty> contentPropertyList = context.readWorkbookHolder().excelReadHeadProperty().getContentProperty();

        for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
            Integer columnIndex = entry.getKey();
            String cellValue = entry.getValue();
            // 获取列头信息
            ExcelContentProperty contentProperty = getContentPropertyByColumnIndex(contentPropertyList, columnIndex);
            if (contentProperty != null) {
                // 获取列名
                String columnName = contentProperty.getHead().getHeadNameList().get(0);
                // 判断是否是时间类型的列
                if (isTimeColumn(columnName)) {
                    // 在这里对时间类型的数据进行格式指定
                    // 比如:可以将字符串转换为时间类型,并指定格式
                }
            }
            // 其他数据处理逻辑...
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 所有数据分析完成后,可以进行额外的处理
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) {
        // 异常处理
        // 在这里可以获取到当前行的错误信息,并保存起来
        // 这里的异常通常是指数据格式错误或类型错误等
    }

    // 根据列索引获取列头信息
    private ExcelContentProperty getContentPropertyByColumnIndex(List<ExcelContentProperty> contentPropertyList, Integer columnIndex) {
        for (ExcelContentProperty contentProperty : contentPropertyList) {
            ExcelContentPropertyIndex index = contentProperty.getHead().getIndex();
            if (index.getColumnIndex() == columnIndex) {
                return contentProperty;
            }
        }
        return null;
    }

    // 判断是否是时间类型的列
    private boolean isTimeColumn(String columnName) {
        // 在这里根据列名判断是否是时间类型的列
        // 比如:判断列名中是否包含时间相关的关键字
        // 如果是时间类型的列,返回true;否则返回false
        return columnName.contains("时间");
    }

    // 获取所有错误信息
    public List<String> getErrorMessages() {
        return errorMessages;
    }
}

相关问题