Java后端返回Excel文件流给前端

在现代的Web应用中,常常会需要将数据导出为Excel文件,以便进行数据分析或报告。本文将介绍如何在Java后端生成Excel文件,并通过文件流返回给前端,帮助开发者快速实现这一功能。

一、项目环境准备

在这篇文章中,我们将使用Spring Boot与Apache POI库来实现Excel文件的生成。确保你的项目中已经包含了Spring Boot的基本依赖和Apache POI库的依赖。在pom.xml中添加如下依赖:

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

二、后端代码实现

我们需要创建一个Controller,负责处理前端的请求,并返回Excel文件。以下是实现该功能的核心代码:

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

import java.io.ByteArrayOutputStream;

/**
 * Excel导出Controller
 */
@RestController
public class ExcelExportController {

    @GetMapping("/export/excel")
    public ResponseEntity<byte[]> exportExcel() {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("示例数据");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("名字");
        headerRow.createCell(1).setCellValue("年龄");

        // 添加示例数据
        Row row = sheet.createRow(1);
        row.createCell(0).setCellValue("张三");
        row.createCell(1).setCellValue(25);

        // 写入到输出流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            workbook.write(outputStream);
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 设置响应头
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment; filename=example.xlsx");
        return ResponseEntity.ok()
                .headers(headers)
                .body(outputStream.toByteArray());
    }
}

三、前端代码实现

在前端,您可以使用JavaScript的fetchAPI来发送请求并下载Excel文件。下面是一个简单的实现示例:

function downloadExcel() {
    fetch('/export/excel')
        .then(response => response.blob())
        .then(blob => {
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = 'example.xlsx';
            document.body.appendChild(a);
            a.click();
            a.remove();
        })
        .catch(error => console.error('下载失败:', error));
}

只需在适当的位置调用downloadExcel()函数,就可以实现Excel文件的下载。

四、旅行图示例

在开发过程中,理解数据流向至关重要。以下是一个旅行图,描述了后端到前端的数据流:

journey
    title 数据流向示例
    section User
      访问导出接口: 5: User
    section Backend
      生成Excel文件: 5: Backend
      返回文件流: 5: Backend
    section Frontend
      下载Excel文件: 5: User

结尾

通过上述步骤,我们成功地实现了Java后端返回Excel文件流给前端的功能。使用Spring Boot与Apache POI库既方便又高效,能够快速满足业务需求。在未来的开发中,您可以根据实际情况对代码进行扩展与优化,以适应更复杂的场景。希望这篇文章对您有所帮助!