• 使用EasyExcel时踩过的坑


    一、问题描述

    使用EasyExcel读取文件数据时,出现数据无法读取情况。

    二、使用EasyExcel的版本

    <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>easyexcelartifactId>
      <version>3.0.5version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、场景复现

    使用了@Accessors(chain = true)(lombok.experimental.Accessors)注解导致无法读取excel文件中的数据。
    读取对象定义如下:

    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode
    public class DemoDTO implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "编号")
        @ExcelProperty("编号")
        private String number;
    
        @ApiModelProperty(value = "名称")
        @ExcelProperty("名称")
        private String name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    读取逻辑如下:

    private List<DemoDTO> parseExcelFileData(MultipartFile multipartFile) {
            List<DemoDTO> demoDTOList = new ArrayList<>();
            // 创建临时文件
            File excelFile = FileUtil.createTempFile();
            try {
                // 文件转换
                multipartFile.transferTo(excelFile);
                Assert.notNull(excelFile, "文件不存在,请重新上传");
    
                EasyExcel.read(FileUtil.getInputStream(Objects.requireNonNull(excelFile))).sheet("Sheet1")
                        .head(DemoDTO.class)
                        .headRowNumber(1)
                        .registerReadListener(new AnalysisEventListener<DemoDTO>() {
                            @Override
                            public void invoke(DemoDTO data, AnalysisContext context) {
                                // 获取当前index
    //                            Integer currentRowNum = context.readRowHolder().getRowIndex();
                                // 校验格式
                                if (BeanUtil.isNotEmpty(data)) {
                                    demoDTOList.add(data);
                                }
                            }
                            @Override
                            public void doAfterAllAnalysed(AnalysisContext context) {
                                log.info("数据读取完毕");
                            }
                        }).doRead();
            } catch (Exception e) {
                log.error("文件解析失败", e);
            } finally {
                FileUtil.del(excelFile);
            }
            return demoDTOList;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    四、问题修复

    定义的映射类中不能使用@Accessors(chain = true)(lombok.experimental.Accessors)注解。

    @Data
    @EqualsAndHashCode
    public class DemoDTO implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "编号")
        @ExcelProperty("编号")
        private String number;
    
        @ApiModelProperty(value = "名称")
        @ExcelProperty("名称")
        private String name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    asp.net课程设计旅游景点推荐系统网站
    Qt6,使用 UI 界面完成命令执行自动化的设计
    controller-manager学习三部曲之一:通过脚本文件寻找程序入口
    npm 清缓存
    (附源码)ssm财务管理系统 毕业设计 282251
    how to view linux man file or .1 file on windows
    OrdinaryKriging3D插值出的结果都是均值问题查找
    web前端框架设计第七课-事件处理
    FastRcnn理论合集
    广告学概论试题总汇
  • 原文地址:https://blog.csdn.net/zhoqua697/article/details/134292142