阿里EasyExcel读写excel文件的基本使用

1、EasyExcel简介

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

2、对excel的写操作

1.1 创建一个普通的maven项目并引入相关依赖

		<dependencies>
		    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
		    <dependency>
		        <groupId>com.alibaba</groupId>
		        <artifactId>easyexcel</artifactId>
		        <version>2.1.1</version>
		    </dependency>
		</dependencies>
		<!--xls-->
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>

            <!--xlsx-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>

easyexcel需要和poi配合使用,且版本需要对应

1.2 创建实体类

设置表头和添加的数据字段
这里我是在测试类中写的,你需要根据自己的业务去修改


import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DemoData {
    //设置excel表头名称
    @ExcelProperty(value = "学生编号")
    private Integer sno;

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

1.3 实现写操作

1.3.1 创建你方法循环设置要添加到excel的数据

需要插入的数据放在集合里面

//创建方法,返回List集合
    private static List<DemoData> getData(){
        List<DemoData> list = new ArrayList<>();
        for (int i = 0; i <10 ; i++) {
            DemoData data = new DemoData();
            data.setSno(i);
            data.setSname("lucy"+i);
            list.add(data);
        }
        return list;
    }
//实现excel写操作
        //1、设置写入文件夹的地址和excel文件的名称
        String filename="F:\\write.xlsx";

        //2、调用easyexcel里面的方法实现写操作
        //write方法中两个参数:第一个参数是文件路径名称  第二个参数:实体类的class
        EasyExcel.write(filename,DemoData.class)
                .sheet("学生列表")
                .doWrite(getData());

执行上述代码,去对应的目录下面看是否生成对应的excel文件
在这里插入图片描述
文件内容
在这里插入图片描述

这个API的方法有点多,实现写操作的方法肯定不止上面这一种

3、对excel的读操作

3.1 创建实体类

这里的注解里面需要加上index属性,标识读取的第几列

package com.aiguigu.demo.excel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DemoData {
    //设置excel表头名称
    @ExcelProperty(value = "学生编号",index = 0)
    private Integer sno;

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

3.2 创建读取操作的监听器


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.util.Map;

/**
 * 创建读取操作的监听器
 */
public class ExcelListener extends AnalysisEventListener<DemoData> {
    //一行一行读取excel内容
    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println("****"+demoData);
    }

    //读取表头内容
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:"+headMap);
    }

    //读取完成之后
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

3.3 调用方法实现excel文件读操作

 //实现读取excel操作
        String filename="F:\\write.xlsx";

        EasyExcel.read(filename,DemoData.class,new ExcelListener())
                .sheet()
                .doRead();

在这里插入图片描述

我们读的就是上面生成的excel文件,从上面截图可看到,没有任何的问题。
实现读写操作的方法很多,上面我也只是用到了其中的一种,之所以不用poi,是因为它太吃内存了。

在这里插入图片描述

posted @   别团等shy哥发育  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示