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

Java 导出 Excel 文件的常见实现方法

对比了 Java 导出 Excel 的多种方案,包括 Apache POI、EasyExcel、JXL、模板引擎及 CSV。Apache POI 功能全面但代码繁琐;EasyExcel 基于 POI 优化,内存占用低,适合大数据量;JXL 已停止维护;模板引擎适用于固定格式报表;CSV 适合纯数据导出。开发者应根据数据量大小和格式复杂度选择合适的工具。

灵魂摆渡发布于 2026/3/28更新于 2026/7/1750 浏览

Java 导出 Excel 文件的常见实现方法

在 Java 中导出 Excel 文件的方法有多种,主要依赖不同的类库或工具,每种方法适用于不同的场景(如数据量大小、格式复杂度、易用性等)。以下是常见的几种实现方式:

选择建议 简单格式 + 小数据量:Apache POI(XSSF/HSSF)或 EasyExcel。 复杂格式 + 中大数据量:EasyExcel(优先)或 POI + 自定义样式。 超大数据量(百万级):EasyExcel(默认优化)或 POI 的 SXSSF。 固定模板报表:Freemarker/Thymeleaf 模板引擎。 纯数据导出(无格式):CSV 格式。

其中,EasyExcel 因易用性和性能优势,成为目前 Java 导出 Excel 的主流选择,尤其在业务系统中广泛应用。

一、基于 Apache POI(最常用)

Apache POI 是 Apache 基金会的开源项目,是 Java 处理 Microsoft Office 文档(包括 Excel)的主流工具,支持.xls(Excel 97-2003)和.xlsx(Excel 2007+)格式。

核心类 HSSF:处理 .xls 格式(最多 65536 行,适合小数据量)。 核心类:HSSFWorkbook(文档)、HSSFSheet(工作表)、HSSFRow(行)、HSSFCell(单元格)。

XSSF:处理 .xlsx 格式(支持百万级行,适合中大数据量)。 核心类:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell。

SXSSF:XSSF 的扩展,支持大数据量导出(通过内存优化,适合十万级以上数据,避免 OOM)。

优点 功能全面,支持复杂格式(单元格样式、合并单元格、公式、图表等)。 兼容性好,支持所有 Excel 版本。

缺点 代码相对繁琐,需要手动创建行、单元格并设置样式。 处理大数据时(如十万级以上),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 dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
// 输出到文件或响应流
FileOutputStream fos = new FileOutputStream("test.xlsx");
workbook.write(fos);
fos.close();
workbook.close();

二、基于 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 格式(不支持.xlsx),目前已停止维护,逐渐被 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 模板)结合模板引擎,动态填充数据后导出。适用于格式固定、样式复杂的报表(如财务报表、合同模板)。

原理 准备 Excel 模板,用占位符(如${name})标记需要填充的位置。 用模板引擎解析模板,替换占位符为实际数据。 生成最终 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();

六、其他工具

Alibaba EasyExcel:如前文所述,是 POI 的优化封装,推荐优先使用。 Aspose.Cells:商业工具,功能强大(支持所有 Excel 特性),但需要付费授权,适合企业级复杂场景。 JXLS:结合 POI 和模板引擎,通过标签(如 jx:each)在 Excel 模板中循环填充数据,适合动态报表。

目录

  1. Java 导出 Excel 文件的常见实现方法
  2. 一、基于 Apache POI(最常用)
  3. 二、基于 Alibaba EasyExcel
  4. 三、基于 JXL(仅支持.xls)
  5. 四、基于模板引擎(如 Freemarker、Thymeleaf)
  6. 五、基于 CSV 格式(伪 Excel)
  7. 六、其他工具
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作
  • AirSim 无人机仿真环境搭建与部署指南
  • Linux 编程中常用的控制线程函数详解
  • Visual Studio 2026 GitHub Copilot Agent 模式深度解析
  • Spring Boot 开发入门:从零搭建第一个 Web 项目
  • STL 转体素工具实战:3D 模型离散化与可视化
  • 零基础学习 Python 指南:从入门到实战的路径规划
  • C 语言与 C++ 的关系详解
  • Flutter eth_sig_util 鸿蒙适配指南:以太坊加密签名与 Web3 开发
  • RocketMQ 5.0 延时消息架构:时间轮算法与分布式调度实践
  • Arduino BLDC 驱动方案:MimiClaw + ESP32 嵌入式机器人实战
  • AI 与存储的结合:智能存储的实践与挑战
  • 机器人 DH 参数模型与正运动学
  • 前端框架选型指南:React、Vue 与 Angular 对比分析
  • Ubuntu 部署 OpenClaw 并接入飞书机器人
  • Android WebRTC SDK 入门指南:从零搭建实时音视频通信应用
  • Java 中间件:RabbitMQ 消费端限流实战(basicQos 配置)
  • Node.js Morgan 日志模块本地时间格式配置
  • 数据结构:用双栈模拟队列的原理与实现
  • Git 分支管理与合并策略实战指南

相关免费在线工具

  • 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