packagehbut.community.excel.converter;importcom.alibaba.excel.converters.Converter;importcom.alibaba.excel.converters.ReadConverterContext;importcom.alibaba.excel.converters.WriteConverterContext;importcom.alibaba.excel.enums.CellDataTypeEnum;importcom.alibaba.excel.metadata.data.WriteCellData;importlombok.extern.slf4j.Slf4j;importjava.text.SimpleDateFormat;importjava.util.Date;@Slf4jpublicclassCustomStringToDateConverterimplementsConverter<Date>{privateSimpleDateFormat format=newSimpleDateFormat("yyyy-MM-dd");@OverridepublicClass<?>supportJavaTypeKey(){returnConverter.super.supportJavaTypeKey();}@OverridepublicCellDataTypeEnumsupportExcelTypeKey(){returnConverter.super.supportExcelTypeKey();}/** * 从excel文件中读取的时候会调用, 返回的是 Date 类型的, 类型在 implements Converter<Date> 指定 * @param context * @return * @throws Exception */@OverridepublicDateconvertToJavaData(ReadConverterContext<?> context)throwsException{String stringValue= context.getReadCellData().getStringValue(); log.info(stringValue);return format.parse(stringValue);}}
convertToJavaData
这个方法的作用就是将字符串转换为日期类对象@DatapublicclassBgqkextendsAbstractExcel{/** * 内部序号 */@ExcelProperty(value="nbxh")privateString nbxh;/** * 变更事项 */@ExcelProperty("bgsx")privateString bgsx;/** * 变更日期 */@ExcelProperty(value="cqrq", converter=CustomStringToDateConverter.class)privateDate cqrq;/** * 当前数据日期 */@ExcelIgnoreprivateDate currentDate;}
上图可以看到一个很明显的nbxh(C|50)
后面的(C|50)
并不是表头, 在读取的时候应该是
/** * 内部序号 */@ExcelProperty(value="nbxh")privateString nbxh;
字段映射应该是nbxh
而并非是nbxh(C|50)