跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 导出 Excel 的主流方案:POI、EasyExcel 与模板引擎实战

Java 导出 Excel 常用方案包括 Apache POI、Alibaba EasyExcel、JXL 及模板引擎等。POI 功能全面但代码繁琐,大数据需 SXSSF;EasyExcel 基于 POI 封装,注解驱动且内存优化,适合百万级数据;JXL 已停止维护;模板引擎适合固定格式报表;CSV 仅用于纯数据。根据数据量与格式需求选择合适工具,优先推荐 EasyExcel 处理常规业务。

雪落无声发布于 2026/1/21更新于 2026/10/2497 浏览

在 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();
dataRow
=
1
0
"张三"
1
25
// 输出到文件或响应流
FileOutputStream
fos
=
new
FileOutputStream
"test.xlsx"

二、基于 Alibaba EasyExcel(推荐)

EasyExcel 是阿里巴巴开源的 Excel 处理工具,基于 POI 封装,专注于简化代码和优化大数据量性能,有效避免 POI 的内存占用问题。

核心特点

  • 注解驱动:通过 @ExcelProperty 等注解映射 Java 对象与 Excel 列,无需手动创建单元格。
  • 低内存:默认采用 SXSSF 的内存优化机制,支持百万级数据导出。
  • 支持复杂格式:合并单元格、表头样式、自定义转换器等。

优缺点分析

  • 优点:代码简洁,降低开发成本;性能优异,适合报表、日志数据等大数据量场景。
  • 缺点:高级格式(如公式、图表)支持较弱,复杂场景仍需结合 POI。

示例代码

// 定义数据模型(通过注解映射 Excel 列)
@Data
public class User {
    @ExcelProperty("姓名")
    private String name;
    
    @ExcelProperty("年龄")
    private Integer age;
}

// 导出逻辑
List<User> data = new ArrayList<>();
data.add(new User("张三", 25));

// 输出到文件
EasyExcel.write("test_easy.xlsx", User.class)
    .sheet("Sheet1")
    .doWrite(data);

三、基于 JXL(仅支持.xls)

JXL(Java Excel API)是早期的 Excel 处理工具,仅支持.xls 格式,目前已停止维护,逐渐被 POI 替代。

优缺点分析

  • 优点:轻量级,API 简单,适合简单的.xls 文件导出。
  • 缺点:不支持.xlsx 格式,功能有限(如不支持公式、图表),且不再更新。

示例代码

// 创建.xls 文档
WritableWorkbook workbook = Workbook.createWorkbook(new File("test_jxl.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);

// 标题行
Label nameLabel = new Label(0, 0, "姓名");
Label ageLabel = new Label(1, 0, "年龄");
sheet.addCell(nameLabel);
sheet.addCell(ageLabel);

// 数据行
Label name = new Label(0, 1, "张三");
Number age = new Number(1, 1, 25);
sheet.addCell(name);
sheet.addCell(age);

workbook.write();
workbook.close();

四、基于模板引擎(如 Freemarker、Thymeleaf)

通过 Excel 模板(如.xlsx 模板)结合模板引擎,动态填充数据后导出。适用于格式固定、样式复杂的报表(如财务报表、合同模板)。

原理

  1. 准备 Excel 模板,用占位符(如 ${name})标记需要填充的位置。
  2. 用模板引擎解析模板,替换占位符为实际数据。
  3. 生成最终 Excel 文件。

优缺点分析

  • 优点:样式与逻辑分离,模板可由非开发人员(如运营)维护;适合复杂格式报表,无需代码中手动设置样式。
  • 缺点:灵活性较低,模板变更需同步更新占位符;大数据量场景性能较差。

示例(Freemarker)

模板文件(template.xlsx.ftl)中单元格设置为 ${user.name}。

Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setDirectoryForTemplateLoading(new File("templates"));
Template template = cfg.getTemplate("template.xlsx.ftl");
Map<String, Object> data = new HashMap<>();
data.put("user", new User("张三", 25));

FileOutputStream fos = new FileOutputStream("report.xlsx");
template.process(data, new OutputStreamWriter(fos));
fos.close();

五、基于 CSV 格式(伪 Excel)

CSV(逗号分隔值)是一种简单的文本格式,可被 Excel 直接打开,适合纯数据导出(无格式要求)。

优缺点分析

  • 优点:实现简单,无需依赖任何 Excel 类库;生成速度快,适合超大数据量(如千万级)。
  • 缺点:不支持任何样式(如单元格合并、颜色、公式),仅能存储纯文本数据。

示例代码

FileWriter writer = new FileWriter("data.csv");
// 标题行
writer.write("姓名,年龄\n");
// 数据行
writer.write("张三,25\n");
writer.write("李四,30\n");
writer.close();

六、其他工具

  • Aspose.Cells:商业工具,功能强大(支持所有 Excel 特性),但需要付费授权,适合企业级复杂场景。
  • JXLS:结合 POI 和模板引擎,通过标签(如 jx:each)在 Excel 模板中循环填充数据,适合动态报表。

目录

  1. 方案选型建议
  2. 一、基于 Apache POI(经典老牌)
  3. 二、基于 Alibaba EasyExcel(推荐)
  4. 三、基于 JXL(仅支持.xls)
  5. 四、基于模板引擎(如 Freemarker、Thymeleaf)
  6. 五、基于 CSV 格式(伪 Excel)
  7. 六、其他工具

更多推荐文章

查看全部
  • 网络安全入门与职业发展学习路线指南
  • 编写第一个 Rocket 0.5 Web 应用
  • Python 开发者如何在 AI 时代保持创意优势
  • Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测
  • 基于 C++ 的 x86 虚拟化抽象框架设计与实现
  • 海螺 AI 多模态架构解析与 Python 接入指南
  • ORA-24550 Signal Received 错误排查与解决方案
  • Web 可访问性最佳实践:构建人人可用的前端界面
  • Python 核心数据结构详解:列表、元组、集合与字典
  • Docker+Ollama 本地部署 DeepSeek 大模型指南
  • Python 爬虫零基础入门:豆瓣电影 Top250 数据抓取实战
  • ROG-Map:一种高效的大场景 LiDAR 运动规划网格地图方案
  • LLaMA Factory 大模型微调、导出与量化指南
  • Qwen3-4B-Instruct 提示词优化与使用避坑指南
  • 二叉树算法实战:美国血统重建与深度宽度计算
  • OpenClaw 技术解析:构建 AI 行动型智能体的架构与实践
  • AI 大模型将如何重塑日常生活与移动端体验
  • C++ STL 双端队列原理与优先级队列模拟实现
  • 文心一言与通义千问大模型能力对比评测
  • 基于 OpenClaw 快速搭建 AI 量化系统实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online