导入excel并返回失败清单

该博客介绍了如何利用EasyPoi库处理Excel数据导入,并进行数据验证。通过实现IExcelModel和IExcelDataModel接口,可以获取导入失败的原因和行号。在导入过程中,使用了Java注解进行数据校验,如@Pattern、@Max和@Min等。当数据不满足条件时,会将失败信息记录在失败清单中,方便后续处理。最后,通过返回失败清单,展示错误原因并以红色高亮标记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入依赖

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

或者

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.1.0</version>
</dependency>

model实现IExcelModel和IExcelDataModel

import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;


/**
 * IExcelModel用于获取失败原因
 * IExcelDataModel用于获取行号
 */
public class ExcelVoModel extends ExcelVo implements IExcelModel, IExcelDataModel {

    private String errorMsg;
    private int rowNum;

    @Override
    public String getErrorMsg() {
        return errorMsg;
    }

    @Override
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }


    @Override
    public int getRowNum() {
        return rowNum;
    }

    @Override
    public void setRowNum(int rowNum) {
        this.rowNum = rowNum;
    }
}

导入数据未通过的就会生成在失败清单中

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;
@Data
public class ExcelVo {

    private String id;
    @Excel(name = "姓名")
    @Pattern(regexp = "[\u4E00-\u9FA5]*", message = "不是中文")
    private String name;

    @Excel(name = "年龄")
    @Max(value = 100,message = "最大值不能超过100")
    @Min(value = 0, message = "最小值不能小于0")
    private Integer age;

    @Excel(name = "创建时间",format = "yyyy-MM-dd")
    private String createDateStr;

    @Excel(name = "Email", width = 25)
    @Email
    private String email;
  }

导入并返回清单

@ApiOperation(value = "导入Excel带校验")
    @PostMapping("/importExcelWithValidator")
    public void importExcelWithValidator(@RequestParam("file") MultipartFile multipartFile,HttpServletResponse response) throws Exception {
        ImportParams params = new ImportParams();
        //表格标题行数,默认0  表示没有标题
        params.setTitleRows(0);
        //表头行数,默认1   表示有一行表头
        params.setHeadRows(1);
        //开始读取的sheet位置,默认为0
        params.setStartSheetIndex(0);
        //...   更多参数查看源码api

        //需要校验
        params.setNeedVerify(true);
        ExcelImportResult<ExcelVoModel> result = ExcelImportUtil.importExcelMore(multipartFile.getInputStream(), ExcelVoModel.class, params);
        List<ExcelVoModel> excelVos = result.getList();
        System.out.println("成功条数:"+excelVos.size());
        excelVos.forEach(excelVo -> {
            System.out.println(excelVo);
            System.out.println(excelVo.getRowNum());
        });

        List<ExcelVoModel> failExcelVos = result.getFailList();
        System.out.println("失败条数:"+failExcelVos.size());
        failExcelVos.forEach(excelVo -> {
            System.out.println(excelVo);
            System.out.println(excelVo.getRowNum());
            System.out.println(excelVo.getErrorMsg());
        });

        //返回失败清单
        setWorkbookResponse(result.getFailWorkbook(),response);
    }

失败清单

错误原因会用红色标注
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大佬腿好粗

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值