easyexcel读取文件内容封装到对象发现全部是空怎么办

本文介绍了在使用EasyExcel进行Excel数据读取时遇到的问题,即实体类中的字段值为空。问题源于Excel列名与实体类注解不匹配。通过在实体类的@ExcelProperty中添加index属性指定列索引,成功解决了数据无法正确映射的问题。此外,还讨论了Lombok在实体类中的使用并未造成此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看看我的代码

package com.starcpdk.easyexcel;

import com.alibaba.excel.EasyExcel;
import com.starcpdk.easyexcel.dto.ExcelStudentDto;
import com.starcpdk.easyexcel.dto.listener.ExcelStudentDtoListener;
import org.junit.Test;

public class ExcelReadTest {

    @Test
    public void simpleReadXlsx() {
        String fileName = "D:/data/code/person/project/borrow/backEnd/alibaba-easyexcel/src/test/java/com/starcpdk/easyexcel/a.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet
        EasyExcel.read(fileName, ExcelStudentDto.class, new ExcelStudentDtoListener()).sheet().doRead();

    }
}

package com.starcpdk.easyexcel.dto.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.starcpdk.easyexcel.dto.ExcelStudentDto;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ExcelStudentDtoListener extends AnalysisEventListener<ExcelStudentDto> {

    @Override
    public void invoke(ExcelStudentDto excelStudentDto, AnalysisContext analysisContext) {
        log.info("解析到一条记录: {} ", excelStudentDto);
        System.out.println(excelStudentDto);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        log.info("所有数据解析完成");
    }
}
package com.starcpdk.easyexcel.dto;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*;

import java.util.Date;

@Data
public class ExcelStudentDto {
    @ExcelProperty(value = "姓名")
    private String name;

    @ExcelProperty(value = "生日")
    private Date birthday;

    @ExcelProperty(value = "薪资")
    private Double salary;
}

以上的代码有什么问题呢 , 为什么会导致对象中封装的全部是空呢 , 首先我考虑到是因为我实体类使用了lombok的原因导致的一些隐藏问题 , 于是我换成了手写getset方法 , 但是发现对象中依旧都是空

在这里插入图片描述

于时我定位到了easyexcel的本身

我们发现我们的实体类中加的注解没有对属性进行列指定 , 于是我们给
@ExcelProperty(value = "生日")注解中设置一个index , 见如下实体类

package com.starcpdk.easyexcel.dto;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*;

import java.util.Date;

@Data
public class ExcelStudentDto {
    @ExcelProperty(value = "姓名" , index = 0)
    private String name;

    @ExcelProperty(value = "生日" , index = 1)
    private Date birthday;

    @ExcelProperty(value = "薪资" , index = 2)
    private Double salary;
}

我们发现我们的数据被写入对象中了
在这里插入图片描述

上面的原因是因为我在实体类中用 @ExcelProperty(value = "薪资"这个注解给的名称和excel表中的表头没对应上 , 所以他无法识别写入进去 , 当我们加了index属性指定当前属性对应excel表中的那儿列 , 那么他就可以和excel表匹配上了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值