JAVA 使用阿里EasyExcel完成对Excel文件进行读写操作

1,585 阅读2分钟

一、EasyExcel简介

EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。 EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

二、实现对Excel表格写操作

1、新建一个Maven项目 2、在pom.xml文件导入相关依赖

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

3、在代码中创建写入实体类(与Excel表对应)

import com.alibaba.excel.annotation.ExcelProperty;

//设置表头和添加的数据字段
public class Data {

    //设置表头名称
    @ExcelProperty("编号")
    private int no;

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

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Data{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }
}

4、新建一个测试类,生成数据并且写入Excel文件中

  1. 首先生成数据
//循环设置要添加的数据,最终封装到list集合中
    private static List<Data> data() {
        List<Data> list = new ArrayList<Data>();
        for (int i = 0; i < 10; i++) {
            Data data = new Data();
            data.setNo(i);
            data.setName("张三"+i);
            list.add(data);
        }
        return list;
    }
  1. 对生成的List写入到Excel文件中,总体代码如下:
import com.alibaba.excel.EasyExcel;

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

public class Test {
    public static void main(String[] args) {
        //定义写入的文件路径以及名字
        String fileName = "F:\\demo.xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, Data.class).sheet("写入").doWrite(data());
    }


//循环设置要添加的数据,最终封装到list集合中
    private static List<Data> data() {
        List<Data> list = new ArrayList<Data>();
        for (int i = 0; i < 10; i++) {
            Data data = new Data();
            data.setNo(i);
            data.setName("张三"+i);
            list.add(data);
        }
        return list;
    }
}

效果: 在这里插入图片描述

三、对Excel表格进行读取操作

我们以上面以及写入的excel表格为例,进行读取操作,并显示到控制台上 1、创建读取的实体类(与excel表对应)

import com.alibaba.excel.annotation.ExcelProperty;

public class ReadData {
    //设置列对应的属性
    @ExcelProperty(index = 0)
    private int id;

    //设置列对应的属性
    @ExcelProperty(index = 1)
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ReadData{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

2、新建一个监听器,前面说过,对读操作Easyexcel是逐行读取并返回,使用会设置监听器(观察者模式)

//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<ReadData> {

    //创建list集合封装最终的数据
    List<ReadData> list = new ArrayList<ReadData>();

    //一行一行去读取excle内容
    @Override
    public void invoke(ReadData user, AnalysisContext analysisContext) {
    	//将读取到的数据输出到控制台
        System.out.println("====="+user);
        list.add(user);
    }

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

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

3、测试代码

EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();

总体代码:

public class Test {
    public static void main(String[] args) {
        //写操作:
        //定义写入的文件路径以及名字
        String fileName = "F:\\demo.xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, Data.class).sheet("写入").doWrite(data());

        //读操作:
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();
    }


//循环设置要添加的数据,最终封装到list集合中
    private static List<Data> data() {
        List<Data> list = new ArrayList<Data>();
        for (int i = 0; i < 10; i++) {
            Data data = new Data();
            data.setNo(i);
            data.setName("张三"+i);
            list.add(data);
        }
        return list;
    }
}

效果: 在这里插入图片描述

整个文章代码目录结构: 在这里插入图片描述