Java Spring Boot输出Excel文件流

在Java开发中,经常需要将数据导出到Excel文件中。Spring Boot是一个非常流行的Java框架,它提供了许多简化开发的功能。本文将介绍如何使用Spring Boot输出Excel文件流,并提供相应的代码示例。

准备工作

在开始编写代码之前,我们需要准备一些依赖库。打开你的项目的pom.xml文件,并添加以下依赖:

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

这些依赖库将帮助我们处理Excel文件的创建和操作。接下来,我们将编写一个简单的Spring Boot应用程序,并添加一个REST接口来生成Excel文件。

创建Spring Boot应用程序

首先,我们创建一个新的Spring Boot项目。打开终端或命令行窗口,并执行以下命令:

$ mkdir springboot-excel
$ cd springboot-excel
$ curl  -o springboot-excel.zip
$ unzip springboot-excel.zip
$ rm springboot-excel.zip

这些命令将创建一个名为springboot-excel的新目录,并在其中下载Spring Boot的初始代码。接下来,我们进入该目录并使用任何文本编辑器打开pom.xml文件。

添加上述提到的依赖库,并确保文件内容如下:

<project xmlns="
         xmlns:xsi="
         xsi:schemaLocation=" 
 
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.example</groupId>
    <artifactId>springboot-excel</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 
    <properties>
        <java.version>11</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 添加Excel依赖库 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

保存并关闭pom.xml文件。

创建REST接口

接下来,我们创建一个REST接口来生成Excel文件。在src/main/java/com/example/springbootexcel目录下创建一个名为ExcelController.java的新文件,并添加以下内容:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

@RestController
public class ExcelController {
 
    @GetMapping("/excel")
    public ResponseEntity<byte[]> generateExcel() throws IOException {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet 1");
        
        // 创建标题行
        Row headerRow = sheet.createRow(0);
        Cell headerCell = headerRow.createCell(0);
        headerCell.setCellValue("Name");
 
        // 创建数据行
        Row dataRow = sheet.createRow(1);
        Cell dataCell = dataRow.createCell(0);
        dataCell.setCellValue("John Doe");
        
        // 将工作簿写入字节数组流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        workbook.write(outputStream);
        workbook.close();
        
        // 设置HTTP响应头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "data.xlsx");
 
        return ResponseEntity.ok()
                .headers