在 Java 开发中,导出 Excel 文件是高频需求。面对不同的数据量级和格式复杂度,选择合适的工具至关重要。常见的实现方式包括 Apache POI、Alibaba EasyExcel、JXL 以及模板引擎等,每种方案都有其适用场景。
方案选型建议
- 简单格式 + 小数据量:Apache POI(XSSF/HSSF)或 EasyExcel。
- 复杂格式 + 中大数据量:优先 EasyExcel,其次 POI + 自定义样式。
- 超大数据量(百万级):EasyExcel(默认优化)或 POI 的 SXSSF。
- 固定模板报表:Freemarker/Thymeleaf 模板引擎。
- 纯数据导出(无格式):CSV 格式。
其中,EasyExcel 因易用性和性能优势,已成为目前 Java 导出 Excel 的主流选择,尤其在业务系统中广泛应用。
一、基于 Apache POI(经典老牌)
Apache POI 是 Apache 基金会的开源项目,处理 Microsoft Office 文档的主流工具,支持.xls(Excel 97-2003)和.xlsx(Excel 2007+)格式。
核心类说明
HSSF:处理 .xls 格式,最多 65536 行,适合小数据量。- 核心类:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell。
XSSF:处理 .xlsx 格式,支持百万级行,适合中大数据量。- 核心类:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell。
SXSSF:XSSF 的扩展,通过内存优化支持大数据量导出(十万级以上),避免 OOM。
优缺点分析
- 优点:功能全面,支持复杂格式(单元格样式、合并单元格、公式、图表等),兼容性好。
- 缺点:代码相对繁琐,需手动创建行、单元格并设置样式;处理大数据时 XSSF 占用内存较高,需用 SXSSF 优化。
示例代码(XSSF)
// 创建 .xlsx 文档
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
// 创建标题行
XSSFRow row = sheet.createRow(0);
row.createCell(0).setCellValue("姓名");
row.createCell(1).setCellValue("年龄");
// 填充数据
XSSFRow sheet.createRow();
dataRow.createCell().setCellValue();
dataRow.createCell().setCellValue();
();
workbook.write(fos);
fos.close();
workbook.close();

