EasyPoi表格导入添加校验

EasyPOI 文件导入校验与自定义校验 加入 EasyPOI 的依赖 <!--easypoi操作--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.4.0</version&g. 阅读详情

项目添加maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>easypoi-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--easy poi 依赖-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.5.0</version>
        </dependency>
        <!--hibernate校验-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.4.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.6</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.48</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>3.1.2</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

实体类

package com.easy.poi.demo.entity;

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


@Data
public class User implements IExcelDataModel, IExcelModel {

    @Excel(name = "序号", width = 20)
    private String serialNum;

    @Excel(name = "姓名", width = 20)
    private String name;

    @Excel(name = "性别", width = 20)
    private String gender;

    /**
     * 行号
     */
    @ExcelIgnore
    private Integer rowNum;

    /**
     * 错误信息
     */
    @ExcelIgnore
    private String errorMsg;
}

自定义校验

package com.easy.poi.demo.util;

import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import cn.hutool.core.util.ObjectUtil;
import com.easy.poi.demo.entity.User;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 自定义校验
 */
@Component
public class UserVerifyHandler implements IExcelVerifyHandler<User> {
    @Override
    public ExcelVerifyHandlerResult verifyHandler(User user) {
        String[] genders = {"男", "女"};
        if (ObjectUtil.isEmpty(user.getName()) && ObjectUtil.isEmpty(user.getGender())) {
            return new ExcelVerifyHandlerResult(true);
        }
        List<String> genderList = new ArrayList<>(Arrays.asList(genders));
        if (!genderList.contains(user.getGender())) {
            return new ExcelVerifyHandlerResult(false, "性别不合法");
        }
        return new ExcelVerifyHandlerResult(true);
    }
}

controller

package com.easy.poi.demo.controller;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.easy.poi.demo.entity.User;
import com.easy.poi.demo.util.UserVerifyHandler;
import jakarta.annotation.Resource;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

@RestController
public class UserController {

    /**
     * 注入自定义处理器
     */
    @Resource
    private UserVerifyHandler userVerifyHandler;

    @PostMapping(value = "/excel/import")
    public List<User> excelImport(@RequestParam("file") MultipartFile file) throws Exception {
        ImportParams params = new ImportParams();
        params.setHeadRows(1);
        // 代表导入这里是需要验证的
        params.setNeedVerify(true);
        // 校验处理接口
        params.setVerifyHandler(userVerifyHandler);
        ExcelImportResult<User> importResult = ExcelImportUtil.importExcelMore(file.getInputStream(), User.class, params);
        List<User> userList = importResult.getList();

        // isVerifyFail:是否存在校验失败,true为校验失败,false为校验成功
        if (importResult.isVerifyFail() || userList.isEmpty()) {
            // 校验失败或者导入的数据为空,输出错误记录的表格
            Workbook workbook = importResult.getFailWorkbook();
            // 当前项目目录
            String currentWorkingDir = System.getProperty("user.dir");
            String projectDir = "easypoi-demo";
            String dirPath = currentWorkingDir + File.separator + projectDir + File.separator + "excel";
            File dir = new File(dirPath);
            if (!dir.exists()) {
                // 目录不存在,创建目录
                dir.mkdir();
            }
            String path = dirPath + File.separator + "error.xlsx";
            OutputStream outputStream = new FileOutputStream(path, true);
            workbook.write(outputStream);

            // 关闭输出流
            workbook.close();
            outputStream.close();
        }
        return userList;
    }
}


测试结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

生成错误表格内容如下
在这里插入图片描述

代码地址

https://gitee.com/BAIXUEQIAN/java-study/tree/develop/easypoi-demo

easypoi导入校验跳过空行_EasyPoi导入验证功能 ImportParams importParams = new ImportParams(); importParams.setTitleRows(0); importParams.setHeadRows(1); importParams.setNeedVerfiy(true); importParams.setVerifyHandler(dnImportExcelVerifyHandler); package com.pig4cloud.pigx.fashion.component.. 阅读详情

相关推荐

SpringBoot整合EasyPoi 实现Excel 导入与导出 导入数据校验

SpringBoot整合EasyPoi 实现Excel 导入与导出 导入数据校验 本文SpringBoot学习小营地是SpringBoot与EasyPoi的整合,通过此文章你可以做到基本数据的导入与导出以及导入数据校验 参考官网: easypoi (1)EasyPoi整合前准备 1.项目依赖 <!--easypoi与SpringBoot的整合包--> ...

胖虎儿的博客 2万+

easypoi的使用-导入校验

easypoi导入校验 一、导入之基础校验 现在产品需要对导入的Excel进行校验,不合法的Excel不允许入库,需要返回具体的错误信息给前端,提示给用户,错误信息中需要包含行号以及对应的错误。 因为 EasyPOI 支持 Hibernate Validator ,所以直接使用就可以了,因为要将错误信息以及错误行号返回,所以需要用到 EasyPOI 的高级用法,实现 IExcelDataModel与 IExcelModel接口,IExcelDataModel负责设置行号,IExcelModel 负责设置错误

拒绝熬夜啊的博客 1万+

EasyPoi实现动态模板导入导出

导入jar包: <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.3</version> </dependency> 动态导入思路: 通过先生成临时模

AirOrange_qi的博客 6577

EasyPoi导入校验+导入自定义查询等校验

easyPoi导入

能让你写代码●写出拯救全世界的感觉 6357

easypoi数据导入校验:智能识别与跳过空行的高效实践

本文深入探讨了使用Easypoi进行数据导入时,如何通过自定义校验处理器智能识别与跳过空行的高效实践。文章详细解析了Easypoi的导入校验流程,并提供了手把手的代码示例,指导开发者实现健壮的空行过滤机制,从而提升数据导入功能的稳定性和用户体验。

weixin_29291863的博客 193

基于rms包的限制性立方样条回归(RCS)R代码实现

RCS

2301_79584199的博客 2万+

JAVA读取复杂表头Excel

【代码】JAVA读取复杂表头Excel。

manhengwei 2247

飞书云文档API实战:从权限申请到自动化操作

本文详细介绍了飞书云文档API的实战应用,从权限申请到自动化操作。内容涵盖如何创建应用、获取关键API权限、理解并使用Tenant Access Token,并通过Python代码示例演示了读取和写入飞书表格数据的具体方法,旨在帮助开发者和业务人员实现文档数据处理的自动化,提升工作效率。

weixin_28318011的博客 1935

java后台导出Excel表格

引言 java后台导出表格一般分两种:注解配置(@Excel)导出和自定义导出 注解配置(@Excel)导出 添加poi依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>${easypoi.version}</version> </dependency> &lt

qq_41366052的博客 1722

Scrapy实现微博关键词爬虫(爬虫结果写入mongodb)

话不多说,上代码: spiders文件夹下的microBlogSpider.py里这样写: # -*- coding: utf-8 -*- import scrapy from scrapy import Spider, Request, FormRequest from scrapy.selector import Selector import datetime import random from blogSpider.items import microBlogItem, keyWordItem f

qq_39360565的博客 1779

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

EasyPoi 导入校验使用

EasyPoi 导入校验使用 因工作需要,使用easypoi导入表格,并进行校验,将表格中有问题的地方,给出提示信息,以表格形式返回. 本篇,直接讲述Excel导入校验,基本介绍后续补上. 1 基于Springboot的easypoi导入表格校验 1 pom.xml <!--easypoi与SpringBoot的整合包--> <dependency> <groupId>cn.afterturn</group

ABestRookie的博客 5209

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 519

JAVA实现easypoi批量导入

第二种:添加必填字段校验(存在错误数据)ImportParams 参数介绍下。第一种:简单的导入(无校验)第三种:必填校验加自定义校验。

m0_46300599的博客 2285

利用CiteSpace实现知网专利文献的高效计量与可视化分析

本文详细介绍了如何利用CiteSpace软件对中国知网(CNKI)的专利文献进行高效的文献计量与可视化分析。文章提供了从数据获取、格式转换、参数设置到图谱解读的完整工作流,旨在帮助研究者快速掌握该工具,从而洞察技术领域的研究热点、核心机构、学者合作网络及发展趋势,提升专利情报分析效率。

weixin_28520495的博客 292

MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标

MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。

十年饮冰,难凉热血 1374

SpringBoot整合EasyPoi实现Excel的导入导出

poi的在线api文档 easypoi官方文档 poi导入导出Excel表格 public class EasyPoiDemo { //创建九九乘法表 @Test public void testWrite() throws IOException { //在内存中创建excel文件 SXSSFWorkbook workbook = new SXSSFWorkbook(); //创建一张表 SXSSFSheet sh

user2025的博客 2466

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

EasyPOI导入Excel时如何避免空白行?5分钟搞定数据校验

本文深入探讨了使用EasyPOI导入Excel时如何有效避免空白行问题。通过解析问题根源,并重点介绍了利用IExcelVerifyHandler接口进行深度数据校验的核心方法,从基础过滤到构建可扩展的校验链,为企业级数据导入提供了完整的解决方案,确保数据质量与系统可靠性。

yog99的博客 591

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用EasyPoi实现批量导入并处理重复数据

1.功能实现:把excel表格的数据导入数据库,对于数据库有的数据,跳过不导入,不重复的数据插入数据库。对于业务校验、重复的数据在导入后返回一个excel表格,全部正常导入返回200 2.技术实现:EasyPOi、异步化 一、maven配置 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base&lt.

weixin_37644979的博客 4145

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Excel导入导出之easypoi用法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

Flyingntothesky的博客 2824

Poi Excel表格导入与校验

Excel表格导入与校验 最近工作上要做一个Excel上传的内容,涉及到excel表格的导入的参数校验,就记录一下。目前主流的excel工具包括Apache POI以及基于poi开发的easypoi,easyexcel。easyexcel主要支持大数据量的高效导入,由于项目内目前还涉及不到千行以上数据导入,以后估计也不会涉及,就没有深入。easypoi提供了参数校验功能,因此本项目针对easypoi提供的导入方式和校验工具类做了一定的改造和简化。 以下是实战内容。 表格列注解 @Target(Element

kidkid1208的博客 2442

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi 1.建立一个对象体 2.导出代码 导出Excel 1.对象加上校验注解 实现 IExcelDataModel, IExcelModel 导入代码 params.setVerifyHandler(excelVerifyInfo);看后面 导入Excel例子 返回的异常Excel 对于想自定义异常的 自己写一个实现类实现 IExcelVerifyHandler即可 代码如下: 关于空行问题 Excel经常会有空行但是

TimerShaft的博客 3689

Easypoi注解校验导入和模板方式导出记录

引入easypoi 3.2.0 后,使用注解导入和 模板文件导出 的一些问题记录。

csdn13636675122的博客 2205

EasyPOI批量导入后返回所有数据&尾列反馈报错信息

批量导入后校验返回所有数据&尾列反馈报错信息

weixin_44533642的博客 1497
上一篇: EasyPOI复杂表格导入
下一篇: Apache POI入门学习
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值