EasyExcel 基本使用、通俗易懂①

EasyExcel读写操作实战
本文介绍了EasyExcel的使用方法,包括如何通过简单的步骤完成Excel的读写操作。重点讲解了依赖引入、实体类创建、监听器实现等内容。

目录

一、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

2、每个workbook里面有很多sheet

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

 话不多说,上代码!

四、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.

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

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

五、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<T>

        这个监听类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方法,查看读取结果 

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

六、总结

读操作:

        1、引入依赖

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

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

写操作:

        1、引入依赖

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

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

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

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

### EasyExcel 基本使用方法 #### 导入依赖 为了能够顺利使用EasyExcel,在项目的`pom.xml`文件中加入如下依赖[^1]: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version> </dependency> ``` #### 创建实体类 创建个简单的Java Bean来映射Excel中的数据结构。假设要处理的是学生信息表,则可以定义如下的Student类: ```java public class Student { @ExcelProperty("学号") private Long id; @ExcelProperty("姓名") private String name; // Getters and Setters... } ``` #### 写操作 下面是段用于向Excel文件写入数据的例子: ```java import com.alibaba.excel.EasyExcel; // ... String fileName = "students.xlsx"; List<Student> studentData = getStudents(); // 获取待写入的数据列表 EasyExcel.write(fileName, Student.class).sheet("Sheet1").doWrite(studentData); ``` 这段代码会新建个名为`students.xlsx`的工作簿,并在个工作表内按照指定格式保存传入的学生对象集合。 #### 读取操作 对于从Excel文档里提取数据而言,可以通过以下方式实现: ```java import java.util.List; import com.alibaba.excel.EasyExcel; // ... String filename = "students.xlsx"; EasyExcel.read(filename, Student.class, new AnalysisEventListener<Student>() { public void invoke(Student data, AnalysisContext context) { System.out.println(data); } public void doAfterAllAnalysed(AnalysisContext context) { System.out.println("完成解析"); } }).sheet().doRead(); ``` 此部分逻辑将会逐行扫描整个表格并将每行转换成对应的`Student`实例打印出来直到结束为止。 #### 设置响应头以便浏览器下载 当希望让用户通过Web页面点击链接触发导出功能时,可以在Servlet或者Spring MVC控制器的方法里面配置HTTP Response头部字段以指示客户端应用程序如何处理返回的内容流[^2] : ```java response.setContentType("application/vnd.ms-8"); String fileName = URLEncoder.encode("dict", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); ``` 上述设置使得浏览器接收到服务器发送过来的二进制字节序列之后自动弹出对话框询问用户是否保存该文件到本地磁盘上;同时指定了默认建议存储的名字叫做“dict”。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值