java如何实现下载excel
使用 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 非常重要:

- .xlsx 文件使用:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - .xls 文件使用:
application/vnd.ms-excel
确保在写入输出流后关闭工作簿对象,避免内存泄漏。对于大型数据集,考虑使用流式写入方式以减少内存消耗。






