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

2022年8月6日08:13:54

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)

  • 作者:兀坐晴窗独饮茶
  • 原文链接:https://blog.csdn.net/weixin_40040107/article/details/123014888
    更新时间:2022年8月6日08:13:54 ,共 1630 字。