当前位置:首页 > 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如何输出

输出到控制台 使用 System.out.println() 方法输出内容到控制台,适用于调试或简单信息展示。 示例代码: System.out.println("Hello, World!")…

php如何实现静态化

php如何实现静态化

PHP 实现静态化的方法 使用 ob_start() 和 ob_get_contents() 利用 PHP 的输出缓冲功能捕获动态生成的页面内容,将其保存为静态文件。这种方法适用于内容不频繁变化的页面…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…

如何配置java环境变量

如何配置java环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

java如何遍历map

java如何遍历map

遍历Map的几种方法 在Java中,遍历Map有多种方式,可以根据需求选择合适的方法。以下是常见的几种遍历方式: 使用entrySet遍历 通过entrySet()方法获取键值对的集合,可以同时访问…