EasyExcel写入内容匹配不上解决方法

简介: EasyExcel写入内容匹配不上解决方法

一、问题

根据读入类的注解,默认只读取表格A-H列的数据。导入的时候会读取H列之外的数据,有可能导致异常;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class ShopImportExcelVO extends RowIndex {
    /**
     * 商品名称
     */
    @ExcelProperty(value = "商品ID")
    private Long id;
    /**
     * 商品名称
     */
    @ExcelProperty(value = "商品名称(必填)")
    private String name;
    /**
     * 商品分类
     */
    @ExcelProperty(value = "商品分类名称ID(必填)")
    private Long systemClassificationId;
    /**
     * 标准价格
     */
    @ExcelProperty(value = "标准价格(必填)")
    private BigDecimal price;
    /**
     * 最低价格
     */
    @ExcelProperty(value = "最低价格(必填)")
    private BigDecimal minPrice;
    /**
     * 商品状态(0正常 1停用)
     */
    @ExcelIgnore
    private Integer status;
 
    @ExcelIgnore
    private Integer sort;
 
 
    /**
     * 服务字段
     */
    @ExcelProperty(value = "服务字段")
    private String serviceField;
    /**
     * 成本费用标准
     */
    @ExcelProperty(value = "成本费用标准")
    private String costField;
    /**
     * 补充报考字段
     */
    @ExcelProperty(value = "补充报考字段")
    private String examinationField;
 
    @ExcelIgnore
    private BigDecimal accountsPayable;
 
    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;
 
}
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.CellExtra;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
 
import java.util.List;
import java.util.Map;
 
@Slf4j
public class ShopExcelListener extends AnalysisEventListener<ShopImportExcelVO> {
 
    List<ShopImportExcelVO> res;
    public ShopExcelListener(List<ShopImportExcelVO> res) {
        this.res=res;
    }
 
    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        log.error("解析失败,但是继续解析下一行:{}", exception.getMessage());
        if (exception instanceof ExcelDataConvertException) {
            ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
            log.error("第{}行,第{}列解析异常,数据为:{}", excelDataConvertException.getRowIndex(),
                    excelDataConvertException.getColumnIndex(), excelDataConvertException.getCellData());
        }
    }
 
    @Override
    public void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {
 
    }
 
    @Override
    public void invoke(ShopImportExcelVO data, AnalysisContext context) {
        ReadRowHolder readRowHolder = context.readRowHolder();
        Integer rowIndex = readRowHolder.getRowIndex();
        data.setRowIndex(rowIndex+1);
        res.add(data);
    }
 
 
 
    @Override
    public void extra(CellExtra extra, AnalysisContext context) {
 
    }
 
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        log.info("所有数据解析完成!");
        log.info("解析数据:{}", JSON.toJSONString(res));
    }
}

二、官方文档

只要部分字段去匹配excel(excel写入内容匹配不上等)

easyexcel默认是全部实体字段都会参与读写,不管你是否加了@ExcelProperty注解


  • 如果您的版本低于2.1.6,建升级到以上版本
  • 升级了还有,在类的最上面加入@ExcelIgnoreUnannotated注解,加入这个注解后只有加了@ExcelProperty才会参与读写。


安装文档,增加注解@ExcelIgnoreUnannotated,问题解决。

相关文章
com.alibaba.excel包教程:Excel数据导出加工进阶篇
com.alibaba.excel包教程:Excel数据导出加工进阶篇
2968 0
|
10月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
5577 112
|
5月前
|
存储 人工智能 前端开发
使用Spring AI Alibaba构建智能体Agent
本文详解使用Spring AI Alibaba框架,结合DashScope和React Agent,通过两个实战案例(基础测试+生产级应用),教你快速构建Java AI智能体
2778 7
|
8月前
|
JavaScript 开发工具 git
IDEA自动导入包 自动编译 自动保存
IDEA自动导入包 自动编译 自动保存
389 11
|
11月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
1493 4
基于springboot+vue开发的会议预约管理系统
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
18210 7
|
Ubuntu Shell Linux
docker安装tar包安装
docker安装tar包安装
3081 2
|
算法 Java 数据安全/隐私保护
国密加密算法简介
国密指国家密码局认定的国产密码算法,主要包括SM1、SM2、SM3、SM4等,并持续完善。SM1是对称加密算法,加密强度与AES相当,需加密芯片支持;SM2是非对称加密,基于ECC算法,签名和密钥生成速度优于RSA;SM3为杂凑算法,安全性高于MD5;SM4为对称加密算法,用于无线局域网标准。本文提供使用Java和SpringBoot实现SM2和SM4加密的示例代码及依赖配置。更多国密算法标准可参考国家密码局官网。
4406 1