当前位置: 首页 > article >正文

Spring Boot整合EasyExcel

文章目录

      • EasyExcel简介
      • Spring Boot整合EasyExcel
        • 一、单sheet写操作
        • 二、多sheet写数据
        • 三、读操作

EasyExcel简介

1、EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel(没有一次性将数据读取到内存中,从磁盘中一行行读取,从而节约内存)。

2、EasyExcel 采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理。EasyExcel官网

Spring Boot整合EasyExcel

1、引入依赖:

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

2、添加 excel 对应的实体类信息:

@Data
public class User {
    @ExcelProperty("姓名")
    private String userName;
    @ExcelProperty("邮箱")
    private String email;
    @ExcelProperty("年龄")
    private Integer age;
}

@ExcelProperty 用于定义 excel 表中列的列名(表头)

一、单sheet写操作
@SpringBootTest
class ApplicationTests {

    @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;
    }
}

二、多sheet写数据

写入不同的 sheet,因此需要用到更灵活的方式,通过创建 ExcelWriter 来实现。这种方法可以控制每个 sheet 的名称、索引和数据来源。

适用场景:复杂、多 sheet 写入或分页写入。

//假设这个map里面有数
Map<Integer, Page<Salaries>> map = new HashMap<>();

//1.获取ExcelWriter实例
try (ExcelWriter excelWriter = EasyExcel.write(文件输出流, Salaries.class).build()) {
            //遍历Map:转为Set集合
            for (Map.Entry<Integer, Page<Salaries>> setMap : map.entrySet()) {
                Integer key = setMap.getKey();
                Page<Salaries> salariesPage = entry.getValue();
                /* 2.获取WriteSheet的实例,每个 writeSheet 表示一个单独的工作表
                两个参数:第一个是sheet的索引,第二个是sheet的名字
                */
                WriteSheet writeSheet = EasyExcel.writerSheet(key, "模板" + key).build();
                /* 开始写
                两个参数:数据、WriteSheet对象
                */
                excelWriter.write(salariesPage.getRecords(), writeSheet);
            }
} catch (IOException e) {
    e.printStackTrace();
}

try 语句中创建 ExcelWriter,确保在完成写操作后自动关闭 ExcelWriter 资源,避免资源泄漏。

① 为什么后面有 build() ?

build() 方法在 EasyExcel 中的作用是构建一个 ExcelWriterWriteSheet 实例。

  • 构建了一个 ExcelWriter 对象,允许我们自定义写入流程(如多个 sheet 的写入、批量写入等)
  • 构建了一个 WriteSheet 对象,指定 sheet 的索引和名称等,用于在指定的 sheet 上进行写操作。

② 不调 build() ?

build() 是必需的,因为 EasyExcel 使用建造者模式。

三、读操作

基本与 写操作 类似,但是需要定义一个监听器(继承 AnalysisEventListener 抽象类),用于监听操作。

监听器:监听 excel 读取操作。(这里例子没有将监听器交给 Spring 管理)

 /**
 * 定义一个数据监听器,继承 AnalysisEventListener 抽象类。
 */

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("========读取完成========");
    }
}
//测试

@SpringBootTest
class TestEasyexcelApplicationTests {

    @Test
    void testRead() {
        // 读取文件的位置
        String fileName = "G:/test/test.xlsx";
        EasyExcel.read(fileName, User.class, new DataListener()).sheet().doRead();
    }
}


http://www.kler.cn/a/414087.html

相关文章:

  • Github 基本使用学习笔记
  • AWS EC2设置用户名密码登录
  • VMware ubuntu创建共享文件夹与Windows互传文件
  • Reachy 2,专为AI与机器人实验室打造的卓越开源双臂移动操作平台!
  • 10、PyTorch autograd使用教程
  • 安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
  • WPS文字学习计划与策略
  • 在受限网络环境下的 Docker 部署实践 —— Strapi 和 Appsmith 的解决之道20241128
  • python-解决一元一次方程
  • Unix和Linux之异同
  • 【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程
  • 【人工智能】从零构建一个文本分类器:用Python和TF-IDF实现
  • 软件工程——期末复习(适用于sdut)
  • vue-baidu-map基本使用
  • webpack 项目访问静态资源
  • 新型实时的端到端对象检测器
  • 大电流PCB设计
  • 什么是BIOS
  • 天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理
  • Python毕业设计选题:基于django+vue的智能停车系统的设计与实现
  • nodejs相关知识介绍
  • 【机器学习】机器学习的基本分类-监督学习-线性回归(Linear Regression)
  • rabbitmq原理及命令
  • Git上传本地项目到远程仓库(gitee/github)
  • Java 与设计模式(14):策略模式
  • QT:多ui界面显示