在Java开发中,将数据导出为Excel文件是常见的需求,广泛应用于报表生成、数据备份等场景,实现Excel导出的方式有多种,其中主流的技术栈包括Apache POI、EasyExcel和JXL等,本文将详细介绍基于Apache POI和EasyExcel的实现方法,并对比其优缺点,帮助开发者根据实际需求选择合适的技术方案。

使用Apache POI实现Excel导出
Apache POI是Apache开源的Java库,专门用于操作Microsoft Office格式文件,包括Excel,它支持.xls(旧版Excel格式)和.xlsx(新版Excel格式),功能全面但存在内存占用较高的问题。
添加依赖
在Maven项目的pom.xml中添加Apache POI的依赖:
<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>
代码实现
以下是一个简单的导出示例,将数据写入.xlsx文件:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class PoiExcelExport {
public static void main(String[] args) throws IOException {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("用户数据");
// 创建标题行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("ID");
headerRow.createCell(1).setCellValue("姓名");
headerRow.createCell(2).setCellValue("年龄");
// 创建数据行
Row dataRow1 = sheet.createRow(1);
dataRow1.createCell(0).setCellValue(1);
dataRow1.createCell(1).setCellValue("张三");
dataRow1.createCell(2).setCellValue(25);
// 写入文件
try (FileOutputStream out = new FileOutputStream("users.xlsx")) {
workbook.write(out);
}
workbook.close();
}
}
优缺点分析
- 优点:功能强大,支持复杂的Excel操作(如公式、图表、样式等)。
- 缺点:处理大数据量时内存消耗较高,可能导致OOM(内存溢出)。
使用EasyExcel实现Excel导出
EasyExcel是阿里巴巴开源的Excel处理工具,基于POI优化,解决了内存占用高的问题,特别适合大数据量导出。
添加依赖
在pom.xml中添加EasyExcel依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
代码实现
以下是通过EasyExcel导出数据的示例:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelExport {
public static void main(String[] args) {
// 准备数据
List<User> dataList = new ArrayList<>();
dataList.add(new User(1, "张三", 25));
dataList.add(new User(2, "李四", 30));
// 设置样式
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 导出Excel
EasyExcel.write("users.xlsx", User.class)
.registerWriteHandler(styleStrategy)
.sheet("用户数据")
.doWrite(dataList);
}
}
// 数据模型
class User {
private Integer id;
private String name;
private Integer age;
// 构造方法、getter和setter省略
}
优缺点分析
- 优点:内存占用低,支持流式写入,适合大数据量;API简洁,易于上手。
- 缺点:功能相对POI较少,不支持复杂操作(如图表)。
技术选型建议
- 小数据量(<10万行):推荐使用Apache POI,功能丰富且成熟。
- 大数据量(>10万行):推荐使用EasyExcel,内存优化更出色,性能更稳定。
- 复杂Excel操作:如需设置复杂样式、公式或图表,优先选择Apache POI。
注意事项
- 文件路径:确保输出目录存在且有写入权限。
- 异常处理:合理捕获IO异常,避免程序崩溃。
- 样式设置:根据需求调整字体、颜色、对齐方式等,提升表格可读性。
通过以上方法,开发者可以灵活实现Java项目中的Excel导出功能,满足不同场景下的需求。


















