【EasyExcel】字段赋值错乱问题

背景:@ExcelProperty(value = "立木序号") private String number;没有导入成功,但是数据赋值到 @ApiModelProperty(value = "检尺类型") private String gaugeType;字段上了

问题: EasyExcel 导入时数据赋值错位:标注 "立木序号" 的number字段没拿到值,而本该赋给 "检尺类型" 的gaugeType字段却接收了 "立木序号" 的数据,核心原因是列名匹配混乱或列索引错位(其他字段正常说明全局导入逻辑无问题)

思考:

原因 1:列名重复 / 注解 value 写错(最常见)

这种错位本质是 EasyExcel 在匹配列名时 "找错了对象",常见场景:

  • Excel 中同时存在 "立木序号" 和 "检尺类型" 列,但gaugeType字段的@ExcelProperty注解value误写成了 "立木序号"(和number字段注解重复);

  • Excel 中列名有相似性(比如 "检尺类型" 列名被误写为 "立木序号"),导致 EasyExcel 把同一列数据匹配到了两个字段中,最终后匹配的字段覆盖 / 抢占了数据。

查看:核对两个字段的@ExcelProperty注解,确保value和 Excel 列名一一对应

原因 2:列索引错位(列名无错但顺序匹配错)

若 Excel 中列的顺序和实体类字段的 "默认匹配顺序" 不一致,且未指定index,EasyExcel 会按 "字段定义顺序" 匹配 "Excel 列顺序",导致错位:比如:

  • Excel 列顺序:立木序号(第 1 列)、检尺类型(第 2 列);

  • 实体类字段定义顺序:先gaugeType、后number;EasyExcel 会把第 1 列(立木序号)的数据赋给第一个字段gaugeType,第 2 列(检尺类型)赋给第二个字段number(若第 2 列无值则number为 null)。

解决:给每个字段指定index,但是我不想额外增加index固定死

核心解决方案:排除无需导入的字段

之所以出现数据错位赋值,是因为gaugeType字段虽然没写@ExcelProperty,但 EasyExcel 在 "按顺序匹配列" 时,仍会把列数据赋给未排除的字段;只需给gaugeType添加@ExcelIgnore注解,明确排除该字段的导入映射,就能让数据正确赋给number字段。

java 复制代码
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModelProperty;

public class YourEntity {
    // 立木序号:需要导入
    @ApiModelProperty(value = "立木序号")
    @ExcelProperty(value = "立木序号") 
    private String number;

    // 检尺类型:不需要导入,添加@ExcelIgnore排除映射(核心修改点)
    @ApiModelProperty(value = "检尺类型")
    @ExcelIgnore // 关键:告诉EasyExcel忽略该字段的导入/导出
    private String gaugeType;

    // 必须保留number字段的setter(之前确认过的核心要求)
    public void setNumber(String number) {
        this.number = number;
    }

    // gaugeType的setter可保留(不影响,因为已被@ExcelIgnore排除)
    public void setGaugeType(String gaugeType) {
        this.gaugeType = gaugeType;
    }

    // getter方法(方便调试查看值)
    public String getNumber() {
        return number;
    }

    public String getGaugeType() {
        return gaugeType;
    }
}

最终:导入正常赋值

相关推荐
CRMEB系统商城6 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience7 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao7 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099678 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
爱喝水的鱼丶8 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
钱六两8 小时前
#3、SpringAI 接入deepSeek大模型(喂饭版)
java·spring boot·ai编程
脱胎换骨-军哥8 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
songroom9 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
kebeiovo9 小时前
游戏服务端开发:Actor模型详解(Go语言)
开发语言·后端·golang
迷途呀9 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp