Loading...

Java开发日志EasyExcel自定义类型转换、Excel表头字段问题

1. EasyExcel自定义数据转换

  • EasyExcel 是阿里的一个用来读取和写入excel的库, 因为项目需要, 所以我需要从前端上传excel文件, 然后导入到数据库中

1.1 自定义转换类

  • 因为我前端读取的是日期字符串, 但是实体类上的是日期类, 所以需要手动编写转换类进行转换
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 这个方法的作用就是将字符串转换为日期类对象

1.2 实体类

  • 使用时直接在字段上面指定即可
@DatapublicclassBgqkextendsAbstractExcel{/**      * 内部序号      */@ExcelProperty(value="nbxh")privateString nbxh;/**      * 变更事项      */@ExcelProperty("bgsx")privateString bgsx;/**      * 变更日期      */@ExcelProperty(value="cqrq", converter=CustomStringToDateConverter.class)privateDate cqrq;/**      * 当前数据日期      */@ExcelIgnoreprivateDate currentDate;}

2. Excel表字段问题

Java开发日志EasyExcel自定义类型转换、Excel表头字段问题

  • 上图可以看到一个很明显的nbxh(C|50) 后面的(C|50) 并不是表头, 在读取的时候应该是

    /**      * 内部序号      */@ExcelProperty(value="nbxh")privateString nbxh;
  • 字段映射应该是nbxh 而并非是nbxh(C|50)