使用 Spring Boot 和 EasyExcel 进行动态表头导出 Excel

引言

在企业级应用中,经常需要将数据导出为 Excel 文件,以便用户进行分析和查看。Spring Boot 结合 EasyExcel 可以非常方便地实现这一需求。本文将详细介绍如何使用 Spring Boot 和 EasyExcel 进行动态表头的 Excel 导出。

环境准备

1. 添加依赖

首先,在 pom.xml 文件中添加 EasyExcel 和其他必要的依赖:

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- EasyExcel -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.2.1</version>
    </dependency>

    <!-- Hutool 工具类 -->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.11</version>
    </dependency>
</dependencies>

2. 创建模板文件

src/main/resources/templates 目录下创建一个 Excel 模板文件 exportTemplate.xlsx,内容如下:

第二行

代码实现

1. 创建数据模型

定义一个数据模型类 DataModel,用于存储要导出的数据:

package org.songtang.springbootdynamic.controller;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DataModel {
    @ExcelProperty(index = 0)
    private Integer id;
    @ExcelProperty(index = 1)
    private String name;
    @ExcelProperty(index = 2)
    private String code;

    public DataModel(Integer id, String name, String code) {
        this.id = id;
        this.name = name;
        this.code = code;
    }
}

2. 创建控制器

在控制器中,我们将读取模板文件,填充动态表头和数据,然后将结果导出:

package org.songtang.springbootdynamic.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/excel")
public class ExcelController {

    @GetMapping("/export")
    public ResponseEntity<byte[]> export() throws IOException {
        Resource resource = new ClassPathResource("templates/exportTemplate.xlsx");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        InputStream templateIs = resource.getInputStream();

        try (ExcelWriter excelWriter = EasyExcel.write(bos).withTemplate(templateIs).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet().build();

            // 示例数据
            List<DataModel> dataList = new ArrayList<>();
            dataList.add(new DataModel(1, "张三", "A"));
            dataList.add(new DataModel(2, "李四", "B"));
            dataList.add(new DataModel(3, "王五", "C"));

            // 填充数据
            excelWriter.fill(dataList, writeSheet);

            // 动态表头
            Map<String, Object> map = new HashMap<>();
            map.put("dynamicHeader", "9月");

            // 填充动态表头
            excelWriter.fill(map, writeSheet);
        }

        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        try {
            headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode("exportTemplate", "UTF-8") + ".xlsx");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return ResponseEntity
                .ok()
                .headers(headers)
                .body(bos.toByteArray());
    }
}

3. 启动应用

启动 Spring Boot 应用,访问 http://localhost:8080/excel/export,你应该能够下载到一个 Excel 文件,其中包含动态设置的表头和具体的导出数据。

总结

通过本文的介绍,我们学习了如何使用 Spring Boot 和 EasyExcel 进行动态表头的 Excel 导出。EasyExcel 提供了强大的功能和简洁的 API,使得 Excel 导出变得非常简单。希望这篇文章对大家有所帮助!

相关推荐
十年一梦实验室3 分钟前
【C++】sophus : rxso3.hpp 实现了 3D 空间中的旋转和缩放操作的 RxSO3 类 (二十一)
开发语言·c++·人工智能·算法·3d
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ9 分钟前
MyBatis执行完sql后,返回的数值代表的意思
java·开发语言
小爬虫程序猿24 分钟前
如何利用Python爬虫精准获取苏宁易购商品详情
开发语言·爬虫·python
API快乐传递者24 分钟前
Python爬虫获取1688详情接口详细解析
开发语言·爬虫·python
Fan_55827 分钟前
008 Qt_显示类控件_QLabel
开发语言·qt
No0d1es32 分钟前
GESP CCF C++六级编程等级考试认证真题 2024年12月
开发语言·c++·算法·青少年编程·gesp·ccf·六级
IT199536 分钟前
Qt笔记-Qt Creator开发环境搭建
开发语言·笔记·qt
CodeClimb40 分钟前
【华为OD-E卷-寻找密码 100分(python、java、c++、js、c)】
java·python·华为od
爱上语文44 分钟前
宠物管理系统:Service层
java·开发语言·宠物
意疏1 小时前
【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章
c语言·开发语言·指针