当前位置: 首页 > ds >正文

Java 操作 Excel 全方位指南:从入门到避坑,基于 Apache POI

Java 操作 Excel 全方位指南:从入门到避坑,基于 Apache POI

在现代企业级应用开发中,与 Microsoft Excel 文件进行交互是一项极其常见的需求。无论是数据导出生成报表、批量导入数据到系统,还是解析用户上传的 Excel 模板,Java 开发者都需要一套强大而可靠的工具库。Apache POI 项目正是为此而生的事实标准。本文将深入探讨如何使用 Apache POI 的两个核心组件 poi-ooxmlpoi-ooxml-schemas,从原理到实战,为你全面解析 Java 操作 Excel 的方方面面。

一、依赖简介:POI、poi-ooxml 与 poi-ooxml-schemas

在开始编码之前,我们首先要理清 Apache POI 项目下的几个核心依赖及其关系。

1.1 Apache POI 项目概览

Apache POI(Poor Obfuscation Implementation)是一个开源的 Apache 项目,提供了一系列 Java API 来操作各种 Microsoft Office 格式文件,包括 Word、Excel、PowerPoint、Visio、Outlook 等。

对于 Excel 文件,POI 主要支持两种格式:

  • HSSF (Horrible SpreadSheet Format):用于操作 Excel 97(-2007) 的 .xls 格式。
  • XSSF (XML SpreadSheet Format)SXSSF (Streaming Usermodel for XSSF):用于操作 Excel 2007 OOXML (.xlsx) 及更高版本的格式。

1.2 核心依赖辨析

在我们的 pom.xml 中,通常会看到以下依赖:

<!-- 核心POI功能,包含HSSF用于操作旧的.xls格式 -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version> <!-- 请使用最新版本 -->
</dependency><!-- 用于操作新的.xlsx格式 (XSSF和SXSSF) -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version> <!-- 请使用最新版本 -->
</dependency><!-- (通常自动传递依赖,无需显式声明) -->
<!-- <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>5.2.3</version>
</dependency> -->
  • poi:这是核心 Artifact,包含了操作所有 OLE2 格式文件(如 .xls, .doc)的类(如 HSSFWorkbook, HSSFSheet)。
  • poi-ooxml:这个依赖是本文的重点。它包含了操作 OOXML 格式文件(如 .xlsx, .docx)的类(如 XSSFWorkbook, XSSFSheet)。关键点在于:poi-ooxml 本身依赖于 poipoi-ooxml-schemas。所以你通常只需要声明 poi-ooxml 即可。
  • poi-ooxml-schemas:这个依赖包含了完整的 OOXML 架构定义(大量的 .xsd 文件)。它提供了 Excel 文件底层 XML 结构的 Java 映射。poi-ooxml 在运行时需要它来理解和生成符合规范的 .xlsx 文件。在绝大多数情况下,Maven/Gradle 的依赖传递机制会自动引入它,我们无需在 pom.xml 中显式声明。

总结:如果你只需要处理旧的 .xls 格式,引入 poi 即可;如果需要处理新的 .xlsx 格式,引入 poi-ooxml 就够了,它会自动帮你搞定其他依赖。

二、实战场景:生成一个复杂的 Excel 报表

让我们从一个真实的业务场景出发:将数据库中的用户信息列表导出为一个格式美观的 .xlsx 报表

假设我们有一个 User 实体类:

@Data // Lombok 注解
public class User {private Long id;private String username;private String email;private Integer age;private String department;private LocalDateTime createTime;
}

我们的目标是生成一个包含标题、表头、数据行和合计行的 Excel 文件,并设置一些简单的样式。

2.1 基础步骤:创建工作簿、工作表、行和单元格

所有操作都围绕 Workbook -> Sheet -> Row -> Cell 这个层次结构进行。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;public class ExcelExporter {public void exportUsersToExcel(List<User> userList, String filePath) 
http://www.xdnf.cn/news/20261.html

相关文章:

  • Spring Boot 源码深度解析:揭秘自动化配置的魔法
  • AR技术:电力巡检的智能升级之路
  • Python的RSS/Atom源解析库feedparser
  • 【微知】vscode如何开启markdown的review模式?
  • 飞算JavaAI炫技赛:在线图书借阅平台的设计与实现
  • 【完整源码+数据集+部署教程】雪崩检测与分类图像分割系统源码和数据集:改进yolo11-HSFPN
  • 网页版的云手机都有哪些优势?
  • C++(Qt)软件调试---bug排查记录(36)
  • 如何根据Excel数据表生成多个合同、工作证、录取通知书等word文件?
  • 【自动化实战】Python操作Excel/WORD/PDF:openpyxl与docx库详解
  • WinForms 项目里生成时选择“首选目标平台 32 位导致有些电脑在获取office word对象时获取不到
  • EXCEL列数据前面补零
  • GD32入门到实战35--485实现OTA
  • 警惕!你和ChatGPT的对话,可能正在制造分布式妄想
  • 计算机网络2 第二章 物理层——用什么方式传输邮件
  • 狗都能看懂的HunYuan3D 1.0详解
  • 一种基于注解与AOP的Spring Boot接口限流防刷方案
  • C#海康车牌识别实战指南带源码
  • VAE(变分自动编码器)技术解析
  • iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
  • FairGuard游戏加固产品常见问题解答
  • 云市场周报 (2025.09.05):解读腾讯云AI安全、阿里数据湖与KubeVela
  • C语言中常见的数据结构及其代码实现
  • 数据传输优化-异步不阻塞处理增强首屏体验
  • 自演化大语言模型的技术背景
  • 心理学家称AI大模型交流正在引发前所未见的精神障碍
  • 手把手教你用CUDA Graph:将你的LLM推理延迟降低一个数量级
  • 51单片机------中断系统
  • 51单片机基础day3
  • 开源混合专家大语言模型(DBRX)