Java Excel 读取成流,返回给前端

在开发过程中,我们经常会遇到需要读取 Excel 文件,并将其转换为流,然后返回给前端的需求。本文将介绍如何使用 Java 读取 Excel 文件,并将其转换为流,以便在前端进行处理。

为什么选择使用 Java 读取 Excel 文件?

  • Java 是一种广泛使用的编程语言,具有强大的处理文件的能力。
  • Excel 是一种常见的办公文档格式,在企业开发中经常需要处理。
  • 将 Excel 文件读取为流,可以方便地在前端进行处理和展示。

使用 Apache POI 读取 Excel 文件

Apache POI 是一个流行的 Java 库,用于读取和写入 Microsoft Office 文档格式,包括 Excel 文件。下面是使用 Apache POI 读取 Excel 文件的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class ExcelReader {
    public static InputStream readExcelAsInputStream(String filePath) throws Exception {
        File file = new File(filePath);
        InputStream inputStream = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(inputStream); // 支持 Excel 2007 及以上版本
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

        return workbookToInputStream(workbook);
    }

    private static InputStream workbookToInputStream(Workbook workbook) throws Exception {
        // 创建一个临时文件,将 Workbook 写入其中
        File tempFile = File.createTempFile("temp", ".xlsx");
        workbook.write(tempFile);

        // 将临时文件转换为输入流
        InputStream inputStream = new FileInputStream(tempFile);

        // 删除临时文件
        tempFile.delete();

        return inputStream;
    }
}

上述代码首先使用 FileInputStream 读取 Excel 文件,然后使用 XSSFWorkbook 创建 Workbook 对象,再获取第一个工作表。最后,将 Workbook 对象转换为输入流,并返回。

在 Spring Boot 中使用 ExcelReader

如果你使用 Spring Boot 进行开发,可以将上述代码集成到你的项目中。下面是一个使用 Spring Boot 的示例:

import org.springframework.core.io.InputStreamResource;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.InputStream;

@RestController
@RequestMapping("/excel")
public class ExcelController {
    @GetMapping("/download")
    public ResponseEntity<InputStreamResource> downloadExcel() {
        try {
            String filePath = "/path/to/your/excel/file.xlsx";
            InputStream inputStream = ExcelReader.readExcelAsInputStream(filePath);

            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Disposition", "attachment; filename=excel.xlsx");

            return ResponseEntity
                    .ok()
                    .headers(headers)
                    .contentType(MediaType.APPLICATION_OCTET_STREAM)
                    .body(new InputStreamResource(inputStream));
        } catch (Exception e) {
            // 处理异常
        }
    }
}

上述代码中,我们创建了一个 ExcelController 类,并为其中的 /download 路径注册了一个 GET 请求。在该请求处理方法中,我们调用了 ExcelReader.readExcelAsInputStream 方法将 Excel 文件读取为输入流,并通过 ResponseEntity 对象返回给前端。

结束语

在本文中,我们介绍了如何使用 Java 读取 Excel 文件,并将其转换为流,以供前端处理。通过使用 Apache POI 库,我们可以轻松地实现这一目标。希望本文能帮助你在开发过程中处理 Excel 文件的需求。