zoukankan      html  css  js  c++  java
  • 简单了解一下 EasyExcel

    一、EasyExcel

    1、简介

      EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。
      在尽可能节约内存的情况下支持读写百 M 的 Excel(没有一次性将数据读取到内存中,从磁盘中一行行读取,从而节约内存)。
      EasyExcel 采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。
    简单地理解:可以方便、快速的读取、写入 execl 内容。

    【官方文档地址:】
        https://alibaba-easyexcel.github.io/index.html
        https://www.yuque.com/easyexcel

    2、SpringBoot 快速整合 EasyExcel(实现写操作)

    (1)创建一个 SpringBoot 项目。

    (2)添加依赖信息。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.6</version>
    </dependency>

    (3)添加 excel 对应的实体类信息。

    package com.lyh.test.testeasyexcel.entity;
    
    import com.alibaba.excel.annotation.ExcelProperty;
    import lombok.Data;
    
    @Data
    public class User {
        @ExcelProperty("姓名")
        private String userName;
        @ExcelProperty("邮箱")
        private String email;
        @ExcelProperty("年龄")
        private Integer age;
    }

    (4)编写测试方法,写入文件

    package com.lyh.test.testeasyexcel;
    
    import com.alibaba.excel.EasyExcel;
    import com.lyh.test.testeasyexcel.entity.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @SpringBootTest
    class TestEasyexcelApplicationTests {
    
        @Test
        void testWrite() {
            // 文件保存的位置
            String fileName = "G:/test/test.xlsx";
            EasyExcel.write(fileName, User.class).sheet("用户表").doWrite(list());
        }
    
        // 简单造写数据,用于测试
        public List<User> list() {
            List<User> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                User user = new User();
                user.setUserName("tom" + i);
                user.setAge((int)(Math.random() * 20));
                user.setEmail(user.getUserName() + "@163.com");
                list.add(user);
            }
            return list;
        }
    }

    (5)执行结果

    3、SpringBoot 快速整合 EasyExcel(实现读操作)

      基本与 写操作 类似,但是需要定义一个监听器,用于监听操作。
    (1)创建项目、引入依赖、编写实体类(与写操作相同,此处省略)

    (2)编写监听器,监听 excel 读取操作。
      此监听器不交给 Spring 管理,所以相关注入(比如 @Autowired)不会生效。
      若想使用 service、dao 等相关类,可以通过 构造方法将其引入。

    package com.lyh.test.testeasyexcel.excel;
    
    import com.alibaba.excel.context.AnalysisContext;
    import com.alibaba.excel.event.AnalysisEventListener;
    import com.lyh.test.testeasyexcel.entity.User;
    
    import java.util.Map;
    
    /**
     * 定义一个数据监听器,继承 AnalysisEventListener 抽象类。
     * 该监听器不交给 Spring 管理,所以如果需要使用 service、dao 相关的类时,需要通过构造方法引入。
     */
    
    public class DataListener extends AnalysisEventListener<User> {
        // 一行行读取表格内容
        @Override
        public void invoke(User user, AnalysisContext analysisContext) {
            System.out.println("===============" + user);
        }
    
        // 读取表头内容
        @Override
        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
            System.out.println("======表头内容========" + headMap);
        }
    
        // 读取完成后的操作
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            System.out.println("========读取完成========");
        }
    }

    (3)编写测试方法,读取文件

    package com.lyh.test.testeasyexcel;
    
    import com.alibaba.excel.EasyExcel;
    import com.lyh.test.testeasyexcel.entity.User;
    import com.lyh.test.testeasyexcel.excel.DataListener;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class TestEasyexcelApplicationTests {
    
        @Test
        void testRead() {
            // 读取文件的位置
            String fileName = "G:/test/test.xlsx";
            EasyExcel.read(fileName, User.class, new DataListener()).sheet().doRead();
        }
    }

    此处仅做个简单了解,详细使用参考官方文档进行更详细的操作。

    【官方文档地址:】
        https://alibaba-easyexcel.github.io/index.html
        https://www.yuque.com/easyexcel
  • 相关阅读:
    [ZJOI2010] 数字计数
    [USACO] 2004 Open MooFest 奶牛集会
    数星星
    [SCOI2011] 糖果
    西瓜种植
    [NOI2018] 归程
    [APIO2012] 派遣
    小K的农场
    妮可妮可妮 [Hash]
    [ZJOI2012] 灾难
  • 原文地址:https://www.cnblogs.com/l-y-h/p/12918575.html
Copyright © 2011-2022 走看看