Spring Boot中实现列表数据导出为Excel文件

news/2024/7/21 6:05:42 标签: spring boot, excel, 后端, 文件导出, Apache POI

点击下载《Spring Boot中实现列表数据导出为Excel文件》

1. 前言

本文将详细介绍在Spring Boot框架中如何将列表数据导出为Excel文件。我们将通过Apache POI库来实现这一功能,并解释其背后的原理、提供完整的流程和步骤,以及带有详细注释的代码示例。最终,读者将能够轻松地将自己的列表数据导出为Excel文件。

2. Apache POI介绍

Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,特别是Excel。它是Apache软件基金会的一个开源项目,提供了多种API来处理Office文档,包括Word、Excel、PowerPoint等。Apache POI的主要目标是提供一种简单、可靠的方式来使用Java程序操作这些常见的文件格式。

Apache POI库的结构分为几个部分,每个部分都提供了针对不同Office格式文件的功能。对于Excel文件,POI提供了HSSF和XSSF两种模型来处理不同版本的Excel文件。HSSF用于处理较旧的Excel格式(.xls),而XSSF用于处理较新的Excel格式(.xlsx)。这些模型都提供了读写Excel工作簿、工作表、单元格等的功能。

除了Excel,Apache POI还支持其他Office格式的文件。例如,HWPF用于处理Word文档(.doc),HSLF用于处理PowerPoint演示文稿(.ppt),而HDGF用于处理Visio绘图(.vsd)。此外,还有HSMF用于处理Outlook邮件格式(.msg)。

Apache POI的使用非常广泛,因为它提供了一种在Java应用程序中处理Office文件的通用方式。无论是创建新的Office文档、读取现有文档的内容、修改文档还是将文档转换为其他格式,Apache POI都能提供所需的工具和功能。

使用Apache POI时,开发人员可以通过Java代码来操作Office文档,而无需依赖Microsoft Office软件本身。这使得在服务器端或没有安装Office软件的环境中处理Office文件成为可能。

总的来说,Apache POI是一个功能强大、易于使用的Java库,它使得开发人员能够轻松地在Java应用程序中处理Microsoft Office格式的文件。无论是进行数据迁移、生成报表还是与其他系统进行集成,Apache POI都是一个非常有价值的工具。

在这里插入图片描述

3. 使用流程和步骤

3.1 添加依赖

首先,在Spring Boot项目的pom.xml文件中添加Apache POI的依赖。

<dependency>  
    <groupId>org.apache.poi</groupId>  
    <artifactId>poi</artifactId>  
    <version>5.0.0</version>  
</dependency>  
<dependency>  
    <groupId>org.apache.poi</groupId>  
    <artifactId>poi-ooxml</artifactId>  
    <version>5.0.0</version>  
</dependency>

3.2 创建导出服务

创建一个服务类来处理列表数据的导出。

import org.apache.poi.ss.usermodel.*;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.util.List;  
  
public class ExcelExportService {  
  
    public void exportToExcel(List<?> dataList, String[] headers, String fileName) {  
        Workbook workbook = new XSSFWorkbook(); // 创建工作簿  
        Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表  
  
        // 创建表头  
        Row headerRow = sheet.createRow(0);  
        for (int i = 0; i < headers.length; i++) {  
            Cell headerCell = headerRow.createCell(i);  
            headerCell.setCellValue(headers[i]);  
        }  
  
        // 填充数据  
        int rowNum = 1;  
        for (Object data : dataList) {  
            Row row = sheet.createRow(rowNum++);  
            // 假设data是一个Map,包含了要导出的字段和值  
            if (data instanceof Map) {  
                Map<?, ?> dataMap = (Map<?, ?>) data;  
                int cellNum = 0;  
                for (String header : headers) {  
                    Cell cell = row.createCell(cellNum++);  
                    if (dataMap.containsKey(header)) {  
                        cell.setCellValue(dataMap.get(header).toString());  
                    }  
                }  
            }  
        }  
  
        // 写入文件  
        try (FileOutputStream outputStream = new FileOutputStream(fileName)) {  
            workbook.write(outputStream);  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                workbook.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}

3.3 调用导出服务

在你的控制器中,调用上述服务来导出数据。

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
  
import java.util.Arrays;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
@Controller  
public class ExcelExportController {  
  
    @Autowired  
    private ExcelExportService excelExportService;  
  
    @GetMapping("/export")  
    public String exportData() {  
        // 模拟数据  
        List<Map<String, Object>> dataList = Arrays.asList(  
                new HashMap<String, Object>() {{  
                    put("Name", "Alice");  
                    put("Age", 25);  
                }},  
                new HashMap<String, Object>() {{  
                    put("Name", "Bob");  
                    put("Age", 30);  
                }}  
        );  
  
        // 表头  
        String[] headers = {"Name", "Age"};  
  
        // 导出文件路径  
        String fileName = "data.xlsx";  
  
        // 调用服务导出数据  
        excelExportService.exportToExcel(dataList, headers, fileName);

		// 提示用户下载文件(这里假设你在前端有相应的逻辑来处理文件下载)  
	    return "redirect:/download/" + fileName;  
	}
}

在上面的代码中,ExcelExportService 类提供了导出Excel文件的核心功能。exportToExcel 方法接受三个参数:dataList(要导出的数据列表),headers(表头数组),fileName(导出的Excel文件名)。方法内部首先创建了一个工作簿和一个工作表,然后遍历数据列表,将数据填充到工作表的单元格中。最后,通过FileOutputStream将工作簿写入到指定的文件中。

4. 总结

本文详细介绍了在Spring Boot项目中如何使用Apache POI库将列表数据导出为Excel文件。通过创建自定义的导出服务,我们可以轻松地处理数据,并将其转换为Excel格式。这种方法适用于各种需要数据报表的场景,能够极大地提高数据分析和处理的效率。在实际开发中,我们可以根据具体需求,进一步扩展和优化这个导出服务,比如支持更复杂的Excel格式、样式等。

点击下载《Spring Boot中实现列表数据导出为Excel文件》


http://www.niftyadmin.cn/n/5393258.html

相关文章

stream流-> 判定 + 过滤 + 收集

List<HotArticleVo> hotArticleVos hotArticleVoList .stream() .filter(x -> x.getChannelId().equals(wmChannel.getId())).collect(Collectors.toList()); 使用Java 8中的Stream API对一个名为hotArticleVoList的列表进行过滤操作&#xff0c;筛选出符合指定条件…

.NET Core Web API介绍+优缺点

一.NET Core Web API介绍 似乎有一些拼写错误在您的问题中&#xff0c;我猜测您可能是想问关于“.NET Core Web API”的介绍。如果是这样的话&#xff0c;我将为您提供关于.NET Core Web API的基本介绍。 .NET Core Web API 是一种构建 HTTP 服务的框架&#xff0c;它是 ASP.N…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第12篇分享&#xff01; 这周时间看了两本书&#xff0c;一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

vue-element-admin如何绕开系统的请求的路由,使用静态路由

我开发时候遇到一个这样的问题&#xff0c;服务端权限管理部分还没搞好&#xff0c;所以但是需要将所有菜单列出来 我做了以下的修改 首先是建一个文件存放后期需要动态生成的路由 引入到常量路由中 另外在permissions当中

Day07-面向对象-封装

文章目录 Day07面向对象基础(封装)学习目标1 面向对象编程思想概述1.1 编程语言概述1.2 程序设计方法 2 类和对象2.1 什么是类2.2 什么是对象2.4 定义类2.5 创建对象 3 成员变量3.1 如何声明成员变量3.2 对象的实例变量1、实例变量的特点2、 实例变量和局部变量的区别:3、实例变…

数据产品经理——数据指标

ROI 定义:return on investment,投资回报率。指通过投资而应返回的价值,即企业从一项投资活动中得到的经济回报。 计算公式:投资回报率(ROI)=年利润或年均利润/投资总额100% eCPM 定义:effective cost per mile,每一千次展示可以获得的广告收入。展示的单位可以是网…

音视频数字化(数字与模拟-电影)

针对电视屏幕,电影被称为“大荧幕”,也是娱乐行业的顶尖产业。作为一项综合艺术,从被发明至今,近200年的发展史中,无人可以替代,并始终走在时代的前列。 电影回放的原理就是“视觉残留”,也就是快速移过眼前的画面,会在人的大脑中残留短暂的时间,随着画面不断地移过,…

连接未来:嵌入式系统在物联网时代的应用

连接未来&#xff1a;嵌入式系统在物联网时代的应用 随着物联网技术的不断发展&#xff0c;嵌入式系统在物联网时代扮演着至关重要的角色。嵌入式系统作为连接物理世界和数字世界的桥梁&#xff0c;为物联网的实现提供了技术支持和基础设施。以下将从几个方面探讨嵌入式系统在…