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表字段问题
-
上图可以看到一个很明显的
nbxh(C|50)
后面的(C|50)
并不是表头, 在读取的时候应该是/** * 内部序号 */@ExcelProperty(value="nbxh")privateString nbxh;
-
字段映射应该是
nbxh
而并非是nbxh(C|50)