Easy Excel参数校验实现

这篇具有很好参考价值的文章主要介绍了Easy Excel参数校验实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

应用场景

在导入需求中,往往要求用户输入值的合法性,如是否为空的校验、正则校验、存在性校验,在以往实现方案中,通常是使用for循环来实现的,但是在Excel工具解析文件的过程中,其实已经逐行解析数据过一遍,如果在业务逻辑中再次for循环读取一次,实则是没有必要的,因此,我们可以使用Easy Excel提供AnalysisEventListener监听器实现。

Easy Excel通过Listener实现参数合规校验方案

举个导入的例子,导入若干条用户信息,包括姓名、手机号、性别等信息,其中姓名、手机号不能为空,并抛出某行错误原因。

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.util.StringUtils;

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

public class UserImportExample {

    public static void main(String[] args) {
        String filePath = "path/to/user_data.xlsx";

        List<UserInfo> userList = new ArrayList<>();

        // 创建监听器
        AnalysisEventListener<UserInfo> listener = new AnalysisEventListener<UserInfo>() {
            private boolean hasError = false; // 是否存在错误
            private int errorRowNum = -1; // 错误行号
            private String errorMessage = ""; // 错误信息

            @Override
            public void invoke(UserInfo userInfo, AnalysisContext analysisContext) {
                int currentRowNum = analysisContext.readRowHolder().getRowIndex() + 1; // 获取当前行号(从1开始)

                // 对姓名和手机号进行非空校验
                if (StringUtils.isEmpty(userInfo.getName()) || StringUtils.isEmpty(userInfo.getPhone())) {
                    hasError = true;
                    errorRowNum = currentRowNum;
                    errorMessage = "姓名和手机号不能为空";
                    // 抛出异常或进行其他处理
                    throw new RuntimeException("第" + errorRowNum + "行出现错误:" + errorMessage);
                } else {
                    // 添加非空的用户信息到列表中
                    userList.add(userInfo);
                }
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                // 数据读取完毕后的处理,可在这里做一些收尾工作
                if (!hasError) {
                    // 所有数据校验通过,继续后续操作
                }
            }
        };

        try {
            // 执行导入操作
            EasyExcel.read(filePath, UserInfo.class, listener).sheet().doRead();
        } catch (Exception e) {
            // 捕获异常,获取具体某一行的错误原因
            if (e instanceof RuntimeException) {
                System.out.println(e.getMessage());
            } else {
                // 处理其他异常
                e.printStackTrace();
            }
        }

        // 打印导入的用户信息
        for (UserInfo user : userList) {
            System.out.println("姓名:" + user.getName() + ",手机号:" + user.getPhone() + ",性别:" + user.getGender());
        }
    }
}

实现原理

EasyExcel 的监听器(Listener)实现原理是基于事件驱动的设计模式。在读取或写入 Excel 数据时,EasyExcel 会触发不同的事件,并通过监听器来处理这些事件。

对于读取操作,EasyExcel 使用 SAX(Simple API for XML)解析器进行数据的逐行读取。在解析过程中,当 SAX 解析器读取到每个单元格数据时,EasyExcel 会触发相应的事件,并将读取到的数据传递给监听器进行处理。这些事件包括开始解析、读取到行数据、读取到单元格数据等。监听器通过实现 AnalysisEventListener 接口,并重写其中的方法来处理这些事件。

对于写入操作,EasyExcel 使用 Apache POI 库进行数据的写入。在写入数据时,EasyExcel 会调用监听器的相应方法,如 cellWriteafterCellCreate 等,以便监听器可以在写入每个单元格时进行自定义操作。

通过监听器,您可以在读取或写入过程中的不同阶段进行逻辑处理、数据校验、数据转换等操作。监听器使您能够以事件驱动的方式对 Excel 数据进行处理,从而更好地控制和定制您的业务逻辑。文章来源地址https://www.toymoban.com/news/detail-519258.html

到了这里,关于Easy Excel参数校验实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件

    目前市面上比较流行的操作 Excel 文件工具大致有两个,一个是 Apache POI 、另一个是阿里的 Easy Excel ,但是POI比较消耗内存,Easy Excel对POI进行了一些优化处理,所以Easy Excel使用更为简单方便,此文将带你学习掌握这两款开发利器! Apache POI 是用Java编写的免费开源的跨平台的

    2024年02月05日
    浏览(44)
  • Excel 导入导出(前端处理:xslx)(后端处理:hutool+poi || Easy Excel )

      目录 Excel 导入导出(前端处理:xslx) 代码示例 导入Excel数据 将数据封装好后传给后端  导出数据 预览(vue-office/excel\\\"……;docx-preview) Excel 导入导出(后端处理:hutool+poi || Easy Excel ) 前端 后端使用Hutool处理Excel 文件 Hutool-poi是针对Apache POI的封装,因此需要用户自行引入

    2024年01月24日
    浏览(72)
  • 自动化数据驱动|Easy POI读取接口测试用例的excel

    在做的接口自动化测试中,把测试用例维护在excel表格中,通过Easy POI把用例中的行转成实体类对象,再通过testNG的@DataProvider注解把测试用例数据传递给测试方法执行用例。 2.1 用例表格示例 2.2 实体类设计 easy poi: 通过@Excel属性能够和excel的表头映射上去 ⚠️值的注意:实体

    2024年01月23日
    浏览(53)
  • springboot实现导出excel

    添加maven依赖 编写要导出的类 去数据库查询要导出的数据 调用接口导出数据 实操测试 点击链接会实现导出excel的功能 http://162.14.107.118:8086/PC/exportExcelAddMoney

    2024年02月10日
    浏览(43)
  • SpringBoot实现Excel导入导出

    话不多说,直接上代码 依赖文档 找到pom文件,如下图所示 引入需要的依赖 导出写法: 导入写法: 已上就是导入导出

    2024年02月09日
    浏览(43)
  • SpringBoot实现导出Excel功能

    需求要做一个导出excel的功能 本篇着重阐述后端怎么实现,前端实现的部分只会粗略阐述。该实现方案是经过生产环境考验的,不是那些拿来练手的小demo。本文阐述的方案可以借鉴用来做毕设或者加到自己玩的项目中去。 再次声明,本文是 百万级数据量 的企业级解决方案,

    2024年02月01日
    浏览(49)
  • springboot项目实现excel导出

    项目中经常会有列表查询,然后导出excel的功能,以下是其中一种方法,简单写个Demo ,先看项目结构: pom.xml 其他依赖就不提了,主要就只这个依赖org.apache.poi.poi-ooxml 说明: poi是Apache旗下的一个开源项目,由Apache官方维护,poi有两个不同的jar包,分别是处理excel2003和excel2

    2024年02月08日
    浏览(50)
  • [office] Excel中函数进行计算两个日期参数差值的方法 #职场发展#学习方法#媒体

    Excel中函数进行计算两个日期参数差值的方法 在excel使用中,如果想计算两个日期参数的差值,该用什么函数和如何使用呢?今天,小编就教大家在Excel中函数进行计算两个日期参数差值的方法。 Excel中函数进行计算两个日期参数差值的步骤 在excel中计算两个日期参数的差值,

    2024年02月20日
    浏览(49)
  • SpringBoot实现Excel导入导出,简单好用

    POI是Java操作MicroOffice(如对Excel的导入导出)的一个插件。POI的全称是(Poor Obfuscation Implementation),POI官网地址是 http://poi.achache.org/index.html 。 EasyPoi对POI进行了优化 ,更加设计精巧,使用简单,接口丰富,扩展简单。EasyPOI的同类产品有Execel4J,Hutools等。EasyPoi官网地址是 h

    2024年02月11日
    浏览(43)
  • SpringBoot和Vue实现Excel导入导出

    hutool工具 hutool工具 浏览器格式 打开浏览器能下载Excel即成功。 3.1 测试: 通过postman测试,send之后返回true测试成功。 在Navicat刷新,可以看到新写入的数据。

    2024年03月17日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包