EasyExcel学习笔记

EasyExcel详解(结合官方文档) EasyExcel的学习分享 阅读详情

一、EasyExcel简介

1.1Excel导入导出的应用场景

1、数据导入:减轻录入工作量;
2、数据导出:统计信息归档;
3、数据传输:异构系统之间数据传输;

1.2EasyExcel特点

Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

二、EasyExcel的写操作–导出

2.1引入依赖

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

2.2创建实体类,和Excel数据对应

@Data
@ContentRowHeight(15)//easyExcel注解设置内容的行高
@HeadRowHeight(25)//easyExcel注解设置表头的行高
@ColumnWidth(12)//easyExcel注解设置列宽
public class DemoData {

    //设置Excel表头名称
    @ExcelProperty(value = "学生编号",index = 0)
    private Integer sno;

    @ExcelProperty(value = "学生姓名",index = 1)
    private String sname;
}

2.3实现导出

public static void main(String[] args) {
        //==================写操作=====================
        //实现Excel写的操作
        //设置写入文件夹的地址和Excel文件名称
        String filename = "D:\\1.xlsx";

        //这里需要指定写用哪个写 然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(filename,DemoData.class).sheet("学生列表").doWrite(data());
    }

    public static List<DemoData> data(){
        List<DemoData> list = new ArrayList<>();
        for (int i = 1; i < 11; i++) {
            DemoData demoData = new DemoData();
            demoData.setSno(i);
            demoData.setSname("我今天吃了"+i+"个包子");
            list.add(demoData);
        }
        return list;
    }

三、EasyExcel的读操作–导入

3.1创建对应的实体类,标记对应列关系

@Data
@ContentRowHeight(15)//easyExcel注解设置内容的行高
@HeadRowHeight(25)//easyExcel注解设置表头的行高
@ColumnWidth(12)//easyExcel注解设置列宽
public class DemoData {

    //设置Excel表头名称
    @ExcelProperty(value = "学生编号",index = 0)
    private Integer sno;

    @ExcelProperty(value = "学生姓名",index = 1)
    private String sname;
}

3.2创建监听进行Excel文件读取

public class ExcelListener extends AnalysisEventListener<DemoData> {

    /**
     * @Description:    一行一行的读取
     * @Author: 		ZhaoLiangLiang
     * @date 			2019/9/11 17:01
     **/
    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println("****"+demoData);
    }

    /**
     * @Description:    读取表头内容
     * @Author: 		ZhaoLiangLiang
     * @date 			2021/9/11 17:02
     **/
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:"+headMap);
    }

    /**
     * @Description:    读取完成之后
     * @Author: 		ZhaoLiangLiang
     * @date 			2019/9/11 17:01
     **/
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println();
    }
}

3.3最终调用

String filename = "D:\\1.xlsx";
EasyExcel.read(filename,DemoData.class,new ExcelListener()).sheet().doRead();

四、写人的案例

4.1整体解读

在这里插入图片描述

4.2代码解读

在这里插入图片描述

4.3Listener代码解读

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

五、EasyExcel导入,并校验导入的数据不能为空

5.1excel模板对象相应属性添加注解

@ExcelProperty("*本人联系电话")
@ExcelValid(message = "本人联系电话不能为空")
private String phone;

5.2编写字段校验类

ExceptionCustom为继承RuntimeException 的自定义异常类

package com.cm.company.listener;

import com.cm.company.utils.exception.ExceptionCustom;
import java.lang.reflect.Field;
import java.util.Objects;

public class ExcelImportValid {
    /**
     * Excel导入字段校验
     *
     * @param object 校验的JavaBean 其属性须有自定义注解
     */
    public static void valid(Object object) throws ExceptionCustom{
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field : fields) {
            //设置可访问
            field.setAccessible(true);
            //属性的值
            Object fieldValue = null;
            try {
                fieldValue = field.get(object);
            } catch (IllegalAccessException e) {
                throw new ExceptionCustom("IMPORT_PARAM_CHECK_FAIL", "导入参数检查失败");
            }
            //是否包含必填校验注解
            boolean isExcelValid = field.isAnnotationPresent(ExcelValid.class);
            if (isExcelValid && Objects.isNull(fieldValue)) {
                System.out.println(field.getAnnotation(ExcelValid.class).message());
                throw new ExceptionCustom("NULL", field.getAnnotation(ExcelValid.class).message());
            }

        }
    }
}

5.3ExceptionCustom

@Data
public class ExceptionCustom extends RuntimeException{

    private String messageType;

    private String message;

    public ExceptionCustom(String messageType,String message) {
        this.message = message;
        this.messageType = messageType;
    }
}

5.4ExcelValid

声明不能为空校验注解

package com.cm.company.listener;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Excel导入必填校验注解
 */
@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelValid {
    String message() default "导入有未填入的字段";
}

5.5Listener监听器的invoke

@Override
public void invoke(Person data, AnalysisContext context) {
    try{
        ExcelImportValid.valid(data);
        list.add(data);//存入list中
    }catch (ExceptionCustom e){
        result.setMessage(e.getMessage());//将报错信息存入result中
    }
}
Alibaba EasyExcel介绍和简单使用 学习Alibaba EasyExcel的简单使用 阅读详情

相关推荐

Alibaba 表格开源工具 easyexcel 快速使用教程

目录 Easyexcel 表格工具概述 Easyexcel 快速启动 Easyexcel 表格工具概述 1、工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据。 2、Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,poi 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但仍有一些缺陷,比如版本兼容、代码臃肿等。 3、easyexcel 是 Ali

蚩尤后裔-汪茂雄 1万+

SpringBoot中使用Easyexcel实现Excel导入导出功能(一)

excel表格的导入与导出,可以说是业务系统里比较常见的功能了,早些时候相信很多人都是使用POI实现excel的导入与导出功能,后来出现了easyexcel,从我自己的使用感受来说,我更喜欢使用easyexcel,除了封装的比较好外,最重要的是对超级大excel导入有了更好的方案,与POI相比,速度更快,占用内存更少。

凡夫编程 2万+

NHANES数据库的介绍及使用(一)

一、数据库概况 NHANES(National Health and Nutrition Examination Survey)是一项旨在评估美国成人和儿童健康和营养状况的研究计划,计划始于20世纪60年代初期,是一项针对不同人群或健康主题的调查。 1999年该调查成为一项持续计划,涉及各种健康和营养测量,项目每年调查一个全国代表性的样本,约5000人,这些人群位于全国各县,每年对其中15个县进行访问。 NHANES访谈部分包括人口统计学、社会经济学、饮食和健康相关问题。体检部分包括生理测量、实验室检查等

Christina 5万+

史上最全EasyExcel

1、数据导入:减轻录入工作量2、数据导出:统计信息归档3、数据传输:异构系统之间数据传输。

豆豆的博客 1万+

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4642

美特CRM mcc_login.jsp存在SQL注入漏洞

MetaCRM 是一种现代化的客户关系管理(CRM)平台,旨在通过集成和自动化的方式帮助企业管理与客户的关系,提高销售和服务效率。MetaCRM 的功能和特性通常涵盖了多个领域,包括销售、营销、客户服务、数据分析和自动化工具。

缘梦未来的博客 808

POI及EasyExcel学习笔记

结构:HSSF - 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。XSSF - 提供读写MicrosoftExcelOOXML格式档案的功能。HWPF - 提供读写[Microsoft Word](https://baike.baidu.com/item/Microsoft Word)格式档案的功能。HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

深思纵似丁香结,一展芭蕉寸凡心。 990

量子编程专业权威教程(十四):Shor 算法

本文系统阐述了Shor算法的原理与实现,重点解析了将大数分解问题转化为周期寻找问题的数论基础,以及模幂运算量子电路的设计方法。通过以N=15为例的完整算法流程演示,展示了量子计算在因数分解问题上的指数级优势。文章详细拆解了受控幺正操作构建、量子傅里叶变换应用等关键技术环节,并提供了可复现的Qiskit代码实现。同时指出了当前量子硬件在比特数、相干时间和错误率等方面面临的工程挑战,这些限制使得分解大整数仍需长期技术突破。该研究为理解量子计算优势提供了典型范例,对后量子密码学发展具有重要启示意义。

分享知识,拥抱变化 799

EasyExcel导出到多个sheet 学习笔记

EasyExcel导出到多个sheet的基本步骤

骑着猪看大海的博客 887

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 582

【Bug已解决】openclaw command not found / openclaw not installed — OpenClaw CLI 安装失败解决方案

安装 OpenClaw 后命令未找到或运行失败,本质是 PATH 未配置或 Python 版本不兼容。文中给出修复 PATH、使用虚拟环境、检查 Python 版本、pipx 安装等完整方案。

一键难忘的博客 8065

EasyExcel 实现多个sheet文件导入 学习笔记

首先定义了一个 StudentDataListener 类,继承自AnalysisEventListener,用于处理 Excel 数据读取过程中的事件。再实现文件导入接口。

骑着猪看大海的博客 689

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 249

EasyExcel 学习笔记

官网案例// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去@Slf4j/*** 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收*//*** 缓存的数据*//*** 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。*/// 这里是demo,所以随便new一个。

qq_56725871的博客 2072

深入解析高通SA8775芯片:性能、架构与研发创新趋势

SA8775芯片凭借其强大的CPU、GPU和AI加速能力,能够应对现代智能系统中的复杂计算任务。它不仅适合高性能计算、深度学习应用,也在汽车、智能设备等领域有广泛的应用前景。无论是在自动驾驶系统中,还是在车载信息娱乐和高级嵌入式系统中,SA8775都展现了其出色的计算能力和能效平衡,是现代智能系统的重要硬件基础。SA8775芯片作为高通的高性能处理平台,具有出色的计算和AI加速能力,但也存在一些值得关注的地方。

weixin_43199439的博客 9346

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

EasyExcel 学习笔记 - 读Excel

另外了方便还引用了, 不创建对象的读 正常创建按表字段,创建实体,然后读数据,没什么好说的。这里看一下:不创建对象的读就是官方代码,只是补充了一下注释。 测试代码 这注释也是官方的,好像少字了。 参考资料 Easy Excel 官网............

灵台方寸山斜月三星洞 3817

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

学习笔记——技术调研——EasyExcel

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

weixin_51737052的博客 516

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POI,EasyExcel学习笔记

文章目录1. POI操作Excel2. EasyExcel操作Excel 1. POI操作Excel Excel简介   一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)和行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推。行则使用数字表示,例如:A3表示第三行第一列,E5表示第五行第五列。 工作簿分类   工作簿

小霆的博客 524

EasyExcel和POI学习笔记

EasyExcel和POI使用详解 一、Poi-Excel 写 1.常规入门 POI是Apache软件基金会的,POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。 所以POI的主要功能是可以用Java操作Microsoft Office的相关文件,这里我们主要讲Excel 1.导入依赖 <dependencies> <!--xls(03)--> <dependency> &

qq_42331108的博客 585

【EasyExcel】学习笔记~从读数据到写数据

本文主要说明EasyExcel 读数据~写数据 操作

少年你真的要止步于此嘛。 1303

阿里easyExcel学习笔记(maven)

阿里easyExcel(导出)学习笔记(maven) 背景 生成Excel比较有名的框架有poi和jxl。这两个方法有一个严重的问题就是非常消耗内存。虽然poi有一些api可以在一定程度上解决一些内存溢出的问题。但是poi在操作07版excel的解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyExcel 重写了 poi 对 07 版 Excel 的解析,使原本需要 100M 左右...

weixin_37775583的博客 7652
上一篇: SpringBoot集成BBOSS-ElasticSearch实现ElasticSearch客户端
下一篇: TypeScript入门及面向对象
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

智汇风渔AI小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值