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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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,问题解决。

相关文章
|
5月前
|
Java 程序员
JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容
JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容
26 0
|
6月前
|
XML JavaScript Java
如何去除Java dom生成的xml文件头的standalone=“no“ ,去掉后无换行
如何去除Java dom生成的xml文件头的standalone=“no“ ,去掉后无换行
102 0
|
6月前
|
XML Java 数据格式
idea自动去除项目无用import以及注释不顶格且注释后空格设置(包括新建项目)
idea自动去除项目无用import以及注释不顶格且注释后空格设置(包括新建项目)
138 0
|
6月前
|
Java
SpringBoot 映射路径中 匹配正则表达式
SpringBoot 映射路径中 匹配正则表达式
191 0
|
XML Java Maven
去除jessionid时shiro设置sessionIdUrlRewritingEnabled报错,超级坑
使用shiro进行权限认证时,登录地址第一次访问总是自动携带JESSIONID,现在需要把它去掉不能显示。
276 0
|
easyexcel
EasyExcel低版本中数据行中包含空数据会跳过导致数据对应不上的问题解析
EasyExcel低版本中数据行中包含空数据会跳过导致数据对应不上的问题解析
491 0
|
关系型数据库 PostgreSQL
mybatisplus表字段是中文时启动项目报错(字符串访问越界)
报错信息: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
|
XML 数据格式
记一次思路:如何取消JDOM生成xml时的自动转义
记一次思路:如何取消JDOM生成xml时的自动转义
记一次思路:如何取消JDOM生成xml时的自动转义