当前位置:首页 > 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 操作工具,适合大数据量导出:

java如何下载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 实现下载:

java如何下载excel

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 添加样式增强可读性:

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 是一种广泛使用的编程语言,适用于开发各种类型的应用程序。以下是 Java 的基本使用方法,包括环境配置、语法基础和常用操作。 安装 Java 开发环境 下载并安装…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…