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,问题解决。

相关文章
hutool实现文件追加内容
hutool实现文件追加内容
hutool实现文件追加内容
|
4月前
|
Java 程序员
JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容
JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容
19 0
|
5月前
|
Java
SpringBoot 映射路径中 匹配正则表达式
SpringBoot 映射路径中 匹配正则表达式
161 0
|
5月前
|
数据采集 Java API
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
|
easyexcel
EasyExcel低版本中数据行中包含空数据会跳过导致数据对应不上的问题解析
EasyExcel低版本中数据行中包含空数据会跳过导致数据对应不上的问题解析
439 0
|
关系型数据库 PostgreSQL
mybatisplus表字段是中文时启动项目报错(字符串访问越界)
报错信息: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
|
Android开发
Eclipse出现:元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”....解决办法
Eclipse出现:元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”....解决办法
228 0