easypoi导入复杂表头Excel

引入Easypoi的maven坐标,我使用的是4.0.0版本

   		<dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.0.0</version>
        </dependency>

先看下Excel模板

在这里插入图片描述

实体类

package com.lee.entity.excel;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
import lombok.Data;

import javax.validation.constraints.NotBlank;

/**
 * @author lwh
 * @date 2022/7/26
 * @description IExcelDataModel 获取导入正常的接口,IExcelModel 获取导入异常的接口
 **/
@Data
public class CompetitorInputEntity implements IExcelDataModel, IExcelModel {
    /**
     * 行号
     */
    private int rowNum;

    /**
     * 错误消息
     */
    private String errorMsg;

    @Excel(name = "厂家名称", fixedIndex = 0)
    @NotBlank(message = "厂家名称,不能为空")
    private String factory;

    @Excel(name = "产品品牌", fixedIndex = 1)
    @NotBlank(message = "产品品牌,不能为空")
    private String brand;

    @Excel(name = "规格", fixedIndex = 2)
    @NotBlank(message = "规格,不能为空")
    private String tireSpecName;

    @Excel(name = "层级", fixedIndex = 3)
    @NotBlank(message = "层级,不能为空")
    private String tireLayerName;

    @Excel(name = "花纹", fixedIndex = 4)
    private String tireFigureName;

    @Excel(name = "花纹深度(mm)", fixedIndex = 5)
    private Double figureDepth;

    @Excel(name = "胎面宽(mm)", fixedIndex = 6)
    private Double tireWidth;

    @Excel(name = "外胎重量(kg)", fixedIndex = 7)
    private Double tireWeight;


    @Excel(name = "市场批发价格", fixedIndex = 8)
    private Double tireMarketWholesalePrice;

    @Excel(name = "经销商到底价", fixedIndex = 9)
    private Double tireDistributorFinallyPrice;

    @Excel(name = "市场批发价格", fixedIndex = 10)
    private Double setMarketWholesalePrice;

    @Excel(name = "经销商到底价", fixedIndex = 11)
    private Double setDistributorFinallyPrice;

    @Excel(name = "系列", fixedIndex = 12)
    private String zhongceSeriesName;

    @Excel(name = "规格", fixedIndex = 13)
    private String zhongceTireSpecName;

    @Excel(name = "层级", fixedIndex = 14)
    private String zhongceTireLayerName;

    @Excel(name = "花纹", fixedIndex = 15)
    private String zhongceTireFigureName;

    @Excel(name = "负荷指数", fixedIndex = 16)
    private String loadIndex;

    @Excel(name = "速度级别", fixedIndex = 17)
    private String speedLevel;

    @Excel(name = "特殊三包政策", fixedIndex = 18)
    private String specialAssurePolicy;

    @Excel(name = "竞品产品优劣势分析及建议", fixedIndex = 19)
    private String remark;

    @Excel(name = "车型", fixedIndex = 20)
    private String carType;

    @Excel(name = "马力(匹)", fixedIndex = 21)
    private Double horsepower;
    /**
     * 路况(1=长途高速、2=普通国道、3=城市道路、4=矿山路面、5=其他)
     */
    @Excel(name = "路况", fixedIndex = 22)
    private String roadCondition;
    /**
     * 最低载重量
     */
    @Excel(name = "最小", fixedIndex = 23)
    private Double loadWeightLeft;
    /**
     * 最高载重量
     */
    @Excel(name = "最大", fixedIndex = 24)
    private Double loadWeightRight;
    /**
     * 最低车速
     */
    @Excel(name = "最小", fixedIndex = 25)
    private Double speedLeft;
    /**
     * 最高车速
     */
    @Excel(name = "最大", fixedIndex = 26)
    private Double speedRight;
    /**
     * 最低运输距离
     */
    @Excel(name = "最小", fixedIndex = 27)
    private Double runDistanceLeft;
    /**
     * 最高运输距离
     */
    @Excel(name = "最大", fixedIndex = 28)
    private Double runDistanceRight;
}

我看网上对于复杂表头的导入要使用groupName,我没有使用也没有什么问题,应该是后续版本升级了,去掉了繁琐操作,但是fixedIndex 是一定要写对的,否则映射不上数据。

导入的代码

 @ApiOperation("EasyPoi导入数据测试")
    @PostMapping("/importCompetitorData")
    public Boolean importCompetitorData(@RequestParam("file") MultipartFile file) throws Exception {
        ImportParams params = new ImportParams();
        // 表头设置为3行
        params.setHeadRows(3);
        // 标题行设置为0行,默认是0,可以不设置
        params.setTitleRows(1);
        // 是否需要校验上传的Excel,默认为false
        params.setNeedVerify(true);
        ExcelImportResult<CompetitorInputEntity> result = ExcelImportUtil.importExcelMore(file.getInputStream(),
                CompetitorInputEntity.class, params);
        System.out.println("是否校验失败: " + result.isVerfiyFail());
        System.out.println("校验失败的集合:" + JSONObject.toJSONString(result.getFailList()));
        System.out.println("校验通过的集合:" + JSONObject.toJSONString(result.getList()));
        for (CompetitorInputEntity entity : result.getFailList()) {
            String msg = "第" + (entity.getRowNum() + 1) + "行的错误是:" + entity.getErrorMsg();
            System.out.println(msg);
        }
        return true;

    }

TitleRows 和 HeadRows 如何设置?

TitleRows: 代表标题行,可以理解忽略的行数,在导入的过程中忽略掉。
HeadRows:代表表头,默认是1,但是对比我这次的导入的Excel,我设置的表头是3。
还不懂?来幅图,是不是瞬间发出,噢~~
在这里插入图片描述

测试下

在这里插入图片描述
第6行厂家名称我没填,验证下检验怎么样,看样子没问题。

白嫖到这,还不赶紧收藏

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
在使用 easypoi 导入 Excel 文件时,如果遇到了合并单元格的表头复杂表头、多行表头等情况,可以使用 easypoi 提供的注解和 API 进行处理。 1. 合并单元格的表头 如果表头中存在合并单元格的情况,可以使用 `@ExcelTarget` 和 `@Excel` 注解来指定合并单元格的范围。例如: ```java @ExcelTarget("StudentEntity") public class StudentEntity { @Excel(name = "姓名", mergeVertical = true) private String name; @Excel(name = "年龄") private Integer age; // ... } ``` 在上面的代码中,`@ExcelTarget` 注解用来指定实体类名称,`@Excel` 注解中的 `mergeVertical` 属性用来指定是否需要纵向合并单元格。 2. 复杂表头 如果表头中存在复杂的情况,可以使用 `@ExcelCollection` 和 `@Excel` 注解来指定复杂表头的结构。例如: ```java @ExcelTarget("ClassEntity") public class ClassEntity { @Excel(name = "班级名称") private String className; @ExcelCollection(name = "学生信息") private List<StudentEntity> studentList; // ... } ``` 在上面的代码中,`@ExcelCollection` 注解用来指定集合属性的表头名称,`@Excel` 注解用来指定集合中元素的属性名称。 3. 多行表头 如果表头中存在多行的情况,可以使用 `@ExcelEntity` 和 `@Excel` 注解来指定多行表头的结构。例如: ```java @ExcelTarget("ScoreEntity") public class ScoreEntity { @ExcelEntity(name = "学生信息") private StudentEntity student; @Excel(name = "语文", orderNum = "1", needMerge = true) private Integer chinese; @Excel(name = "数学", orderNum = "2", needMerge = true) private Integer math; @Excel(name = "英语", orderNum = "3", needMerge = true) private Integer english; // ... } ``` 在上面的代码中,`@ExcelEntity` 注解用来指定实体类属性的表头名称,`@Excel` 注解中的 `orderNum` 属性用来指定表头的顺序,`needMerge` 属性用来指定是否需要合并单元格。 以上就是使用 easypoi 处理合并表头复杂表头、多行表头的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术武器库

一句真诚的谢谢,胜过千言万语

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值