EasyExcel详细教程

2023-11-02

目录

1、Excel导入导出的应用场景

2、EasyExcel特点

3、Excel进行写操作

4、Excel进行读操作 

本篇文章为你详细介绍EasyExcel如何进行读取操作

1、Excel导入导出的应用场景

1、数据导入:减轻录入工作量

2、数据导出:统计信息归档

3、数据传输:异构系统之间数据传输

2、EasyExcel特点

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

3、Excel进行写操作

(1)引入EasyExcel相关依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.1</version>
    </dependency>

       <!--xls-->
    <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
    </dependency>

    <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
    </dependency>

    <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
    </dependency>
</dependencies>

(2)创建实体类

实体类是你要创建表的表头信息

import com.alibaba.excel.annotation.ExcelProperty;

//设置表头和添加的数据字段
public class DemoData {
    //设置表头名称
    @ExcelProperty("学生编号")
    private int sno;

    //设置表头名称
    @ExcelProperty("学生姓名")
    private String sname;

    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    @Override
    public String toString() {
        return "DemoData{" +
                "sno=" + sno +
                ", sname='" + sname + '\'' +
                '}';
    }
}

(3)实现写操作

public class TestEasyExcel {
    public static void main(String[] args) throws Exception {
        String fileName = "F:\\write.xlsx"; //生成路径
        EasyExcel.write(fileName, DemoData.class)  //指定生成路径和实体类,文件流会自动关闭
                .sheet("学生列表")//写到第一个sheet,名字为模板
                .doWrite(data());//开始写入,方法参数为写入内容,调用data()方法写入
    }
    //循环设置要添加的数据,最终封装到list集合中
    private static List<DemoData> data() {
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setSno(i);
            data.setSname("张三"+i);
            list.add(data);
        }
        return list;
    }
}

在指定的生成地址找到生成的excel表,生成内容如下: 

4、Excel进行读操作 

(1)跟读操作一样引入依赖

(2)创建实体类

public class DemoData {
        //value:表头名称为学生编号,index:第0列
        @ExcelProperty(value = "学生编号",index = 0)
        private int sno;

        //value:表头名称为学生姓名,index:第0列
        @ExcelProperty(value = "学生姓名",index = 1)
        private String sname;

        public int getSno() {
            return sno;
        }

        public void setSno(int sno) {
            this.sno = sno;
        }

        public String getSname() {
            return sname;
        }

        public void setSname(String sname) {
            this.sname = sname;
        }

        @Override
        public String toString() {
            return "DemoData{" +
                    "sno=" + sno +
                    ", sname='" + sname + '\'' +
                    '}';
        }
    }

(2)创建监听器读取excel文件 

//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<DemoData> {
    //创建list集合封装最终的数据
    List<DemoData> list = new ArrayList<DemoData>();

    //一行一行去读取excle内容
    @Override
    public void invoke(DemoData data, AnalysisContext analysisContext) {
        System.out.println("***"+data);
        list.add(data);
    }
    //读取excel表头信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息:"+headMap);
    }
    //读取完成后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

 (3)运行main方法读取文件

public class TestEasyExcel {
    public static void main(String[] args) throws Exception {
        String fileName = "F:\\write.xlsx";
        ExcelListener excelListener = new ExcelListener();
        EasyExcel.read(fileName,DemoData.class,excelListener) //指定生成路径,实体类,监听器
             .sheet()//读取第一个sheet
             .doRead();//开始读取
        System.out.println(excelListener.list);
    }
}

控制台输出为:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EasyExcel详细教程 的相关文章

随机推荐

  • idea调试debug(HashMap,ArrayList等)开启/关闭集合类视图

    idea对集合类调试的时候自己做了视图 忽略掉了集合的内部结构 在下面的位置关闭就可以看到原有的集合视图 debug下对比 ArrayList debug下对比 HashMap
  • Java并发编程实战

    文章目录 Java并发编程实战 并发简史 计算机 进程和线程 什么是线程安全类 它的定义是什么 原子性与复合操作 内置锁 锁的重入 用锁来保护状态 活跃性与性能 对象的共享 可见性 使用volatile可以保证可见性 任务执行 在一个线程中
  • Deep learning:三十五(用NN实现数据降维练习)

    前言 本文是针对上篇博文Deep learning 三十四 用NN实现数据的降维 的练习部分 也就是Hition大牛science文章reducing the dimensionality of data with neural netwo
  • 证书报错NET::ERR_CERT_AUTHORITY_INVALID

    因为百度的证书安装路径出错 导致每次打开百度都会报错 NET ERR CERT AUTHORITY INVALID 错误的证书认证 无效证书 报这个错误无非两种情况 证书安装错误 证书过期或有问题 1 证书过期 通过certmgr msc
  • WEB 前端面试题 (实战)(大全)

    文章目录 原生JS 1 什么是 JavaScript 2 简单介绍一下 JS 基本类型 3 字符串如何转换成布尔类型 4 数值类型是如何转换布尔类型 5 字符串是如何转换成数值的 6 都了解过哪些运算符 7 和 运算符区别是什么 8 给变量
  • FTP网盘小demo

    服务端 include
  • JDK1.8接口的默认实现

    很多时候 别人问我接口和类的区别的时候 我都会回答接口里面只能有抽象方法 而不能够有具体方法 但是今天看Mybatis源码的时候 发现了有一段代码是判断接口里面的默认方法的 于是我发现原来对接口的认识太过于肤浅了 JDK1 8之后 在接口里
  • 对未来人生的一些想法

    我现在是自己做 但我此前有多年在从事软件开发工作 当回过头来想一想自己 觉得特别想对那些初学JAVA DOT NET技术的朋友说点心里话 希望你们能从我们的体会中 多少受点启发 也许我说的不好 你不赞同但看在我真心的份上别扔砖头啊 一 在中
  • 如何把思维导图秒变成幻灯?

    场景 有一天给研究生上课 几个学生分别上讲台展示仿真建模作业 我打开笔记本电脑 一边开着仿真工具验证他们的代码 一边用思维导图软件记录他们讲解中出现的问题 问题过多的时候 我示意学生下来 走上讲台 插上优盘 打开了一个幻灯 幻灯图文并茂 针
  • 计算机表格斜杠怎么打,如何在excel表格中绘制斜线并上下打字

    利用excel或是wps做表格时 很多时候会要求做表头要划斜线来划分项目 并且在上面打上字 比如表头里项目 内容 日期做的表格 在做表头时 需要项目 内容和日期在同一个表格里面 并用斜线区分开来 那么怎么实现呢 一起来看看吧 本次所使用的软
  • Win11:如何删除D盘中的WindowsApps文件夹

    问题描述 Win11 如何删除D盘中的WindowsApps文件夹 问题截图 问题原因 WindowsApps是微软应用商店使用的文件夹 是可以删除的 有些windows版本也没有微软应用商店 删除后对系统并不会有太大影响 解决方案 1 W
  • Selector的使用

    文章目录 Selector 的使用 1 直接使用 2 Scrapy Shell 3 XPath 选择器 4 CSS选择器 5 正则匹配 Selector 的使用 我们之前介绍了利用Beautiful Soup pyquery 以及正则表达式
  • Vue实例选项之【computed】

    目录 computed 显示效果 methods 和 computed 选项的区别 computed 的 setter 和 getter 属性 computed 计算属性在处理一些复杂逻辑时是很有用的 div p 原始字符串 message
  • 颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.

    package com two public class ReverseWords 题目 颠倒一个句子中的词的顺序 比如 I am a student颠倒后变成 student a am I 词以空格分隔 要求 1 实现速度最快 移动最少
  • 单片机原理及应用 实验四 指示灯数码管的中断控制

    单片机原理及应用 C51 版 功能 开机后D1灭灯 LED1黑屏 随后单击K1 D1状态反转 单击K2 LED1从0开始循环显示0 F字符 实验目的及要求 1 掌握外部中断的工作原理 学会中断程序设计 2 按照实验报告要求图 绘制本实验电路
  • 全文检索Elasticsearch安装和配置

    一 ElasticSearch 介绍 1 1 为什么要用ElasticSearch 当我们访问购物网站的时候 我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容 这是怎么做到呢 这些随意的数据不可能是根据数据库的字段查询的 那是
  • 2021-08-12PHP面试笔试题记录

    1 编写函数function get duplicate num array in num 获取最大相同元素数组的返回结果数组 其中 in为输入数组 num为相同数组元素的重复上限数值 num gt 2 1 1 例如 in 1 20 20
  • dmmbus地址_www.dmmbus.us服务器iP

    2019 05 09 2020 12 15 69 171 237 26 2019 05 12 2020 12 15 31 13 82 1 2019 05 12 2020 12 15 74 86 142 55 2019 05 16 2020
  • flutter 对一个对象进行fromjson,tojson,encode和decode

    fromJson就是转成我们能app能用的数据 tojson就是转成服务器能用的数据 encode是列表 对象转json decode是json转列表 对象 存在下面的一个对象 RedEnvelopeModel redEnvelopeMod
  • EasyExcel详细教程

    目录 1 Excel导入导出的应用场景 2 EasyExcel特点 3 Excel进行写操作 4 Excel进行读操作 本篇文章为你详细介绍EasyExcel如何进行读取操作 1 Excel导入导出的应用场景 1 数据导入 减轻录入工作量