目录

一、EasyExcel介绍

二、EasyExcel特点

三、Excel基本术语介绍

四、EasyExcel写操作

(1)引入依赖

(2)创建实体类和设置表头

(3)实现最终的添加操作

五、EasyExcel读操作

(1)设置列对应的属性关系

(2)创建读取操作的监听类 AnalysisEventListener

(3)调用方法,实现最终的读取

六、总结

读操作:

写操作:


一、EasyExcel介绍

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

二、EasyExcel特点

  • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
  • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)
  • EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

 三、Excel基本术语介绍

1、整个excel称为:workbook

android 打开excel 修改 android easyexcel_idea

2、每个workbook里面有很多sheet

android 打开excel 修改 android easyexcel_maven_02

3、每个sheet有行、列、单元格

android 打开excel 修改 android easyexcel_idea_03

 话不多说,上代码!

四、EasyExcel写操作

(1)引入依赖

        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>

(2)创建实体类和设置表头

        设置表头和添加数据字段

        当然这里的属性可以设置多个,为了简单理解我就使用两个属性。

        设置表头信息用到了 @ExcelProperty(value = "用户编号") 注解

        @ExcelProperty:用来设置表头信息,里面的value为表头文字

public class User {

    //设置表头名称
    @ExcelProperty(value = "用户编号")
    private int id;

    //设置表头名称
    @ExcelProperty(value = "用户名称")
    private String name;

    public User() { }

    public User(int id, String name) {
        this.id = id;
        this.name = 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 "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

(3)实现最终的添加操作

public static void main(String[] args) {
    //模拟用户数据
    List<User> users = new ArrayList<>();
    users.add(new User(1,"张三"));
    users.add(new User(2,"李四"));
    users.add(new User(3,"王五"));

    //设置文件输出的位置和名称(指定Excel文件的生成位置)
    //这里的 .xlsx 后缀名是excel文件的后缀名
    String filename = "D:\\test01.xlsx";

    //调用方法 这里 需要指定写用哪个class去写,
    EasyExcel.write(filename,User.class) //这步执行之后就相当于创建了一个workbook整个表格
             .sheet("用户列表") //创建一个名为 用户列表 的sheet,
             .doWrite(users);  // 往sheet写入数据,这里的参数是一个集合

    }

运行main方法,之后提示我们说 完成写操作 Finished write.

android 打开excel 修改 android easyexcel_spring_04

接着到我们的D盘查看,就有了我们刚刚指定生成的test01.xlsx文件了,接下来让我们打开看看八

android 打开excel 修改 android easyexcel_java_05

 这里我们就 完成 了EasyExcel的写操作啦

android 打开excel 修改 android easyexcel_maven_06

五、EasyExcel读操作

(1)设置列对应的属性关系

     基于上面创建的User实体类进行修改,在@ExcelProperty注解中新添加 index 参数,

index = 0:表示对应excel表格的第一列。1对应第二列

public class User {
    //设置表头名称
    //设置列对应的属性
    @ExcelProperty(value = "用户编号",index = 0)
    private int id;
    //设置表头名称
    //设置列对应的属性
    @ExcelProperty(value = "用户名称",index = 1)
    private String name;
}

(2)创建读取操作的监听类 AnalysisEventListener

        这个监听类EasyExcel已经帮我封装了,我们只需要继承就可以。这里的泛型是表格对应的实体类(也就是我们创建的User)

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Map;

//这里要继承AnalysisEventListener<T> 加上泛型User(我们自己创建的User)
//实现两个方法
public class ExcelListener extends AnalysisEventListener<User> {

    // 一行一行去读取excel内容,把每行的内容封装到User对象
    // 注意:这里会从excel第二行开始读取,因为它认为第一行是表头,不读第一行
    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        //这里我们把user输出,得到每行内容
        System.out.println(user);
    }

    // 这个方法需要自己手动重写 (也是AnalysisEventListener中的方法)
    // 读取表头内容 Map<Integer, String> headMap 这个map就是表头的内容
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:" + headMap);
    }

    //所有操作之后,这个方法会执行 (目前用不到)
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

(3)调用方法,实现最终的读取

        读的过程中会自动调用监听器里面的方法,一行一行读取,咱这里面可以读到每行中的内容,封装到User对象中。

public static void main(String[] args) {
        //要读取的excel文件位置
        String filename = "D:\\test01.xlsx";
        // 这里需要传入三个参数:被读取的文件位置、用哪个class去读去、监听器对象(咱们自己创建的那个)
        EasyExcel.read(filename, User.class, new ExcelListener())
                 .sheet()    //默认读取第一个sheet,
                 .doRead();  //完成读,读取结束后文件流会自动关闭
    }

运行run方法,查看读取结果 

android 打开excel 修改 android easyexcel_maven_07

以上就是咱们完成EasyExcel的读和写操作。这里我们简单的做个小总结:

六、总结

读操作:

        1、引入依赖

        2、创建和excel对饮的实体类,设置excel表头

        3、调用EasyExcel方法实现写操作

写操作:

        1、引入依赖

        2、创建和excel对饮的实体类,设置对应关系

        3、创建监听器进行一行一行解析过程(创建类,继承类,封装解析方法)

        4、调用EasyExcel方法实现读操作

HZJ,一个在学习路上匍匐前行的小菜鸟...