[alibaba/easyexcel]自定义行内数据类型解析

2024-05-24 469 views
8

建议描述 在excel一行数据绑定到domain的时候,能否提供一个方法让使用者自己自定义解析的方式,比如多个不同的excel,字段顺序相同,但是里面的内容格式不同,如一个时间格式是yyyy-MM-dd,另一个是MM/dd/yyyy,能否通过自定义解析来完成对数据的解析

回答

4

单元格的格式是有时间这种格式的, 如果你的需求是把文本类型的字符串转换成对应的时间,推荐自定义一个类型转换器即可,官方demo-日期数字自定义转换

3

官方demo我看过了,我也的确是这么做的,但是我的需求是想支持更多是时间格式,让不同的时间格式都能解析成java中的date

3

自定义一个这样的转换器就行了

public class CustomStringDateConverter implements Converter<Date> {
    private List<SimpleDateFormat> simpleDateFormatList = new LinkedList<>();

    public CustomStringDateConverter(){
        simpleDateFormatList.add(new SimpleDateFormat("yyyy-MM-dd"));
        simpleDateFormatList.add(new SimpleDateFormat("yyyy/MM/dd"));
    }

    @Override
    public Class supportJavaTypeKey() {
        return Date.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public Date convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                  GlobalConfiguration globalConfiguration) {
        for (SimpleDateFormat simpleDateFormat : simpleDateFormatList) {
            try {
                //TODO 预先判断会更精准
                return simpleDateFormat.parse(cellData.getStringValue());
            } catch (ParseException e) {
                //TODO 解析失败
            }
        }
        return null;
    }

    @Override
    public CellData convertToExcelData(Date value, ExcelContentProperty contentProperty,
                                       GlobalConfiguration globalConfiguration) {
        return new CellData(simpleDateFormatList.get(0).format(value));
    }

}