当前位置:首页 > Java

java如何下载excel

2026-03-22 07:49:47Java

使用 Apache POI 下载 Excel

Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式文件。以下是使用 POI 创建并下载 Excel 文件的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public void downloadExcel(HttpServletResponse response) throws IOException {
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("Sheet1");
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("Hello, Excel!");

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=example.xlsx");
    workbook.write(response.getOutputStream());
    workbook.close();
}

使用 EasyExcel 下载 Excel

EasyExcel 是阿里巴巴开源的 Excel 操作工具,适合大数据量导出:

import com.alibaba.excel.EasyExcel;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public void downloadWithEasyExcel(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=data.xlsx");

    List<DemoData> dataList = new ArrayList<>();
    // 填充数据...

    EasyExcel.write(response.getOutputStream(), DemoData.class).sheet("数据").doWrite(dataList);
}

前端触发下载

在 Spring Boot 应用中,可以通过控制器返回 ResponseEntity 实现下载:

import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

public ResponseEntity<ByteArrayResource> downloadExcel() throws IOException {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    Workbook workbook = new XSSFWorkbook();
    // 填充Excel内容...
    workbook.write(stream);
    workbook.close();

    byte[] bytes = stream.toByteArray();
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attachment; filename=report.xlsx");

    return ResponseEntity.ok()
        .headers(headers)
        .contentLength(bytes.length)
        .contentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))
        .body(new ByteArrayResource(bytes));
}

处理大数据量

当数据量较大时,建议采用分批次写入和流式处理:

public void largeDataExport(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=large_data.xlsx");

    Workbook workbook = new SXSSFWorkbook(100); // 使用SXSSF实现流式导出
    Sheet sheet = workbook.createSheet();

    // 分批次写入数据
    for (int i = 0; i < 100000; i++) {
        Row row = sheet.createRow(i);
        row.createCell(0).setCellValue("Data " + i);
    }

    workbook.write(response.getOutputStream());
    ((SXSSFWorkbook) workbook).dispose(); // 清理临时文件
    workbook.close();
}

设置单元格样式

可以为 Excel 添加样式增强可读性:

java如何下载excel

CellStyle headerStyle = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
headerStyle.setFont(font);

Row headerRow = sheet.createRow(0);
Cell headerCell = headerRow.createCell(0);
headerCell.setCellValue("标题");
headerCell.setCellStyle(headerStyle);

分享给朋友:

相关文章

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

java如何输入字符串

java如何输入字符串

使用 Scanner 类 在 Java 中,可以通过 java.util.Scanner 类来输入字符串。以下是一个示例代码: import java.util.Scanner; public c…