java如何导出excel表格
使用 Apache POI 库导出 Excel
Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式文件,包括 Excel。以下是使用 POI 导出 Excel 的基本步骤。
确保在项目中添加 Apache POI 依赖。Maven 项目中可以添加以下依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
创建一个工作簿(Workbook)对象,可以是 HSSFWorkbook(.xls 格式)或 XSSFWorkbook(.xlsx 格式):
Workbook workbook = new XSSFWorkbook(); // 适用于 .xlsx
Sheet sheet = workbook.createSheet("Sheet1");
在工作表中创建行(Row)和单元格(Cell),并填充数据:
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
将工作簿写入文件或输出流:
try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
使用 EasyExcel 库导出 Excel
EasyExcel 是阿里巴巴开源的 Excel 操作工具,性能优异且 API 简洁。
添加 EasyExcel 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
定义一个数据模型类,用于映射 Excel 列:
@Data
public class UserData {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
}
使用 EasyExcel 写入数据到 Excel 文件:
List<UserData> dataList = new ArrayList<>();
dataList.add(new UserData("张三", 25));
dataList.add(new UserData("李四", 30));
String fileName = "output.xlsx";
EasyExcel.write(fileName, UserData.class).sheet("Sheet1").doWrite(dataList);
处理大数据量导出
对于大数据量导出,可以使用 POI 的 SXSSFWorkbook 或 EasyExcel 的流式写入,避免内存溢出。
使用 SXSSFWorkbook:
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 保留 100 行在内存中
Sheet sheet = workbook.createSheet("Sheet1");
for (int i = 0; i < 10000; i++) {
Row row = sheet.createRow(i);
row.createCell(0).setCellValue("数据" + i);
}
try (FileOutputStream outputStream = new FileOutputStream("large.xlsx")) {
workbook.write(outputStream);
}
workbook.dispose(); // 清理临时文件
使用 EasyExcel 流式写入:
String fileName = "large.xlsx";
EasyExcel.write(fileName, UserData.class)
.sheet("Sheet1")
.doWrite(dataList); // dataList 可以是分批加载的数据






