当前位置:首页 > Java

java如何实现下载excel

2026-03-19 05:15:28Java

使用 Apache POI 库

Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式文件,包括 Excel。以下是一个生成 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 headerRow = sheet.createRow(0);
    headerRow.createCell(0).setCellValue("ID");
    headerRow.createCell(1).setCellValue("Name");

    Row dataRow = sheet.createRow(1);
    dataRow.createCell(0).setCellValue(1);
    dataRow.createCell(1).setCellValue("John Doe");

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=data.xlsx");

    workbook.write(response.getOutputStream());
    workbook.close();
}

使用 EasyExcel 库

EasyExcel 是阿里巴巴开源的 Excel 处理库,性能优异且 API 简洁:

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

public void downloadExcel(HttpServletResponse response) throws IOException {
    List<DemoData> dataList = new ArrayList<>();
    dataList.add(new DemoData(1, "John"));
    dataList.add(new DemoData(2, "Jane"));

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=data.xlsx");

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

public static class DemoData {
    private Integer id;
    private String name;

    // 构造函数、getter 和 setter
}

使用 JExcelAPI

JExcelAPI 是另一个处理 Excel 文件的 Java 库,支持较旧的 .xls 格式:

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public void downloadExcel(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=data.xls");

    WritableWorkbook workbook = Workbook.createWorkbook(response.getOutputStream());
    WritableSheet sheet = workbook.createSheet("Sheet1", 0);

    sheet.addCell(new Label(0, 0, "ID"));
    sheet.addCell(new Label(1, 0, "Name"));
    sheet.addCell(new Label(0, 1, "1"));
    sheet.addCell(new Label(1, 1, "John"));

    workbook.write();
    workbook.close();
}

前端调用方式

在 HTML 页面中可以通过以下方式触发下载:

<a href="/download/excel">Download Excel</a>

<!-- 或者使用 JavaScript -->
<button onclick="window.location.href='/download/excel'">Download</button>

注意事项

设置正确的 Content-Type 非常重要:

java如何实现下载excel

  • .xlsx 文件使用:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • .xls 文件使用:application/vnd.ms-excel

确保在写入输出流后关闭工作簿对象,避免内存泄漏。对于大型数据集,考虑使用流式写入方式以减少内存消耗。

分享给朋友:

相关文章

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Syste…