apache poi与Office Open XML关系

以下内容来自AI

https://ecma-international.org/publications-and-standards/standards/ecma-376/

官方规范

https://poi.apache.org/components/oxml4j/index.html

java中针对Office Open XML的实现

Apache poi中各个组件

https://poi.apache.org/components/index.html

组件缩写

主要处理格式核心 Maven Artifact ID (依赖)

英文全称

中文含义与解释

核心作用

POIFS

OLE2 文件系统 (所有二进制格式的基础)poi

Poor ​Obfuscation ​Implementation ​File ​System

简陋混淆实现文件系统 (一个幽默的名字)
POI 最底层核心,用于处理微软OLE2复合文档格式(.doc, .xls等文件的基础结构)。

所有操作二进制Office文档的基础组件

HPSF

OLE2 文档属性(如标题、作者等)poi

Horrible ​Property ​Set ​Format

糟糕的属性集格式
用于从OLE2文档(如.doc, .xls)中提取摘要信息(属性),如标题、作者、主题等。

读取文档元数据

HSSF

Excel 97-2003 格式 (.xls)poi

Horrible ​Spreadsheet ​Stream ​Format

糟糕的电子表格流格式 (另一个幽默的名字)
用于处理Excel 97-2003格式(.xls)。

读写旧版.xls文件

HWPF

Word 97-2003 格式 (.doc)poi-scratchpad

Horrible ​Word ​Processor ​Format

糟糕的文字处理器格式
用于处理Word 97-2003格式(.doc)。

读写旧版.doc文件

HSLF

PowerPoint 97-2003 格式 (.ppt)poi-scratchpad

Horrible ​Slide ​Layout ​Format

糟糕的幻灯片布局格式
用于处理PowerPoint 97-2003格式(.ppt)。

读写旧版.ppt文件

HDGF

Visio 97-2003 格式 (.vsd)poi-scratchpad

Horrible ​Diagram ​Format

糟糕的图表格式
用于处理Visio 97-2003格式(.vsd)。

读取旧版.vsd文件

HPBF

Publisher 格式 (.pub)poi-scratchpad

Horrible ​Publisher ​Format

糟糕的发布者格式
用于处理Publisher格式(.pub)。

读取.pub文件

HMEF

TNEF (Transport Neutral Encoding Format) 格式

Horrible ​Mail ​Encapsulation ​Format

糟糕的邮件封装格式
用于处理Outlook的TNEF格式(传输中性封装格式,常见于winmail.dat附件)。

解码Outlook富文本邮件附件

HSMF

Outlook 邮件格式 (.msg)poi-scratchpad

Horrible ​Stupid ​Mail ​Format

糟糕的愚蠢邮件格式
用于处理Outlook邮件格式(.msg)。

读取.msg文件

XSSF

Excel 2007+ OOXML 格式 (.xlsx)poi-ooxml

XML ​Spreadsheet ​Stream ​Format

XML电子表格流格式
用于处理Excel 2007及以后基于OOXML的格式(.xlsx)。

读写新版.xlsx文件

XWPF

Word 2007+ OOXML 格式 (.docx)poi-ooxml

XML ​Word ​Processor ​Format

XML文字处理器格式
用于处理Word 2007及以后基于OOXML的格式(.docx)。

读写新版.docx文件

XSLF

PowerPoint 2007+ OOXML 格式 (.pptx)poi-ooxml

XML ​Slide ​Layout ​Format

XML幻灯片布局格式
用于处理PowerPoint 2007及以后基于OOXML的格式(.pptx)。

读写新版.pptx文件

XDGF

Visio XML 格式 (.vsdx)poi-ooxml

XML ​Diagram ​Format

XML图表格式
用于处理Visio 2013及以后基于OOXML的格式(.vsdx)。

读写新版.vsdx文件

OOXML(Office Open XML) 格式依赖

poi-ooxml-lite是 Apache POI 项目中的一个依赖库,主要用于处理 Microsoft Office Open XML (OOXML) 格式(如 .docx, .xlsx, .pptx)​核心的、基础的 XML 模式定义(Schemas)​,并在此基础上提供了一些 API 支持。

特性

poi-ooxml-lite

poi-ooxml-schemas (旧版)

主要作用

提供 OOXML 格式核心的、基础的 XML 模式定义(Schemas)​,是正确解析 .xlsx等格式文件所必需的

在 Apache POI ​5.0.0 版本之前,其作用与 poi-ooxml-lite类似,包含了更完整的 OOXML Schemas 定义

出现版本

Apache POI ​5.0.0 及以上版本引入,并逐渐取代 poi-ooxml-schemas

Apache POI ​5.0.0 以下版本中使用

关系

可以看作是 poi-ooxml-schemas轻量版或后续替代品

在旧版本中承担了提供 OOXML Schemas 定义的核心角色

常见冲突

与旧版本的 easypoi(依赖 poi-ooxml-schemas:4.1.1)同时引入时可能发生冲突

与高版本的 Apache POI(使用 poi-ooxml-lite)同时存在时可能发生冲突

为何需要它

OOXML 格式的文件(如 .xlsx)本质是一个 ZIP 压缩包,其中包含了多个遵循特定 XML 模式的文件。poi-ooxml-lite提供了这些核心的 XML 模式定义(Schemas)​。​

。当 Apache POI 读写 OOXML 文件时,需要依据这些模式定义来解析文件结构、验证数据有效性,并将 XML 元素映射到 Java 对象上供开发者操作。因此,它是 poi-ooxml(提供了操作 .xlsx, .docx等文件的高级 API)能够正常工作的基础依赖之一。

从 poi-ooxml-schemas 到 poi-ooxml-lite

在 Apache POI ​5.0.0 版本之前,这个基础角色主要由 poi-ooxml-schemas这个 JAR 包承担。

从 ​5.0.0 版本开始,Apache POI 团队引入了 poi-ooxml-lite来逐步替代 poi-ooxml-schemas。这可能是为了优化依赖结构、减小体积或提高性能。

poi-ooxml-lite是 Apache POI 处理新版 Office 文件格式的基础支撑,提供了核心的 XML 模式定义。它从 POI 5.0.0 开始登台,接手了昔日 poi-ooxml-schemas的工作。在使用时,只需在 Maven 或 Gradle 中引入高版本的 poi-ooxml,构建工具通常会自动处理并传递 poi-ooxml-lite等必要的依赖。主要需留意它与其他依赖了旧版 poi-ooxml-schemas的库可能存在的冲突问题。

通过中央仓库得知poi-ooxml-schemas,最新版本为Feb 14, 2020发布的4.1.2。

通过中央仓库得知poi-ooxml-lite,从5.x版本开始。

poi-ooxml是OOXML 格式规范的实现。

poi 5.x版本之前,poi-ooxml的规范对应了poi-ooxml-schemas。

poi 5.x版本开始,poi-ooxml的规范对应了poi-ooxml-lite。

核心规律与总结


​命名幽默感​:Apache POI 的开发团队用 ​Horrible (糟糕的)​​ 一词作为许多组件的前缀,这是一种自嘲的幽默,暗示处理微软复杂的二进制格式是一件非常“可怕”的任务。


​缩写规则​:

H​ 开头:代表处理旧的、二进制的 ​OLE2​ 格式(如 .xls, .doc, .ppt)。
​X​ 开头:代表处理新的、基于 ​XML​ 的 ​OOXML​ 格式(如 .xlsx, .docx, .pptx)。对应2007版,对应的文件修改文件后缀为zip,然后解压后即可看到对应的xml文件。

中间字母代表文档类型:
​SS​ - Spreadsheet (电子表格,Excel)
​WP​ - Word Processor (文字处理器,Word)
​SL​ - Slide Layout (幻灯片布局,PowerPoint)
​DG​ - Diagram (图表,Visio)
​PB​ - Publisher (出版商,Microsoft Publisher)
​SM​ / ​ME​ - Stupid Mail / Mail Encapsulation (邮件,Outlook)

​F​ 结尾:通常代表 ​Format​ (格式)。

Apache POI 的名称 "POI" 主要有两种由来说法,都挺有意思的:

1.​官方幽默自嘲(主流说法)​​

"POI" 是 "​Poor ​Obfuscation ​Implementation" 的缩写,翻译过来是“糟糕的模糊实现”或“可怜的混淆实现”。这个名称的由来是,Apache POI 项目最初是通过对 Microsoft Office 复杂的文件格式进行反向工程开发的。开发者们发现这些文件格式的设计似乎有意让人难以理解(Obfuscated),但最终还是被他们成功破解了,于是用这个名称带点幽默和自嘲地调侃了一下这个过程。

2.​夏威夷美食(轻松解读)​​

另一种说法认为 "POI" 指的是夏威夷的一种传统食物(波伊,一种用芋头制成的糊状食物)。这种解释更为轻松,为项目名称增添了一些文化色彩。

目前,第一种说法(Poor Obfuscation Implementation)是社区和文档中最广为接受和认可的官方名称由来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95587.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S32K328上芯片内部RTC的使用和唤醒配置

1:RTC介绍 1.1 RTC基础功能介绍 参考《S32K3xx Reference Manual》,S32K328芯片内部自带RTC功能,并且支持从低功耗状态下唤醒设备;1.2 RTC电源介绍 由以下三张图可知 1:RTC由V11供电,V11依赖外部V15供电&am…

【Python】数据可视化之分类图

目录 条形图 箱形图 散点图 分簇散点图 小提琴 分簇小提琴 条形图 条形图是一种直观的图表形式,它通过不同长度的矩形条(即“条形”)来展示数值变量的中心趋势估计值,其中每个矩形的高度直接对应于该组数据的某个中心量度&…

RabbitMQ模型详解与常见问题

项目demo地址:https://github.com/tian-qingzhao/rabbitmq-demo 一、RabbitMQ组件概念 1.1 Server:接收客户端的连接,实现AMQP实体服务。 1.2 Connection:连接 应用程序与Server的网络连接,TCP连接。 1.3 Channel&…

网络:相比于HTTP,HTTPS协议到底安全在哪?

网络:相比于HTTP,HTTPS协议到底安全在哪? 我们知道HTTPS也是一种应用层协议,它在HTTP的基础上有一层加密,因为HTTP的数据传输都是以明文方式传输的,所以加密主要是为了防止数据在传输的时候被篡改 今天我…

AI 基础设施新范式,百度百舸 5.0 技术深度解析

本文整理自 2025 年 8 月 29 日百度云智大会 —— AI 算力平台专题论坛,百度智能云 AI 计算首席科学家王雁鹏的同名主题演讲。大家下午好!昨天在主论坛,我们正式发布了百度百舸 AI 计算平台 5.0,并展示了多项亮眼的性能数据。今天…

IO进程线程;多线程;线程互斥同步;互斥锁;无名信号量;条件变量;0905

思维导图多线程打印ABC运用无名面量 实现进程同步#include<myhead.h> //定义 无名信号量 sem_t sem1; sem_t sem2; sem_t sem3; //线程1 void* task1(void *arg) {while(1){sem_wait(&sem1);printf("A");fflush(stdout);sleep(1);sem_post(&sem2);} } …

固高 GTS-800 运动控制卡完全使用指南:从硬件部署到高阶应用

固高 GTS-800 系列运动控制卡作为中端工业控制领域的标杆产品,以其 8-16 轴同步控制能力、丰富的插补功能和稳定的性能,广泛应用于激光加工、PCB 制造、精密装配等自动化设备中。本文将系统讲解 GTS-800 的硬件架构、开发环境搭建、核心功能实现及工程实践技巧,帮助工程师快…

STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践

导言 STM32 - Embedded IDE - GCC - 如何在工程中生成.bin格式固件 STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域 STM32 - Embedded IDE - GCC - 如何在工程中定义一段 NoInit RAM 内存 STM32 - Embedded IDE - GCC - 如何将编译得到的.bin固件添加CRC32校验…

HTTP协议——理解相关概念、模拟实现浏览器访问自定义服务器

文章目录HTTP协议理解相关概念HTTP相关背景知识认识URLHTTP协议在网络通信的宏观认识urlencode & urldecodeHTTP请求和应答的格式模拟实现浏览器访问自定义服务器关于http requesthttp request的请求行——URI使用浏览器完成静态资源的访问常用的报头属性http response状态…

【服务器】英伟达M40显卡风冷方案心得

在之前的博文中&#xff0c;博主说到最近准备自己组装一台服务器&#xff0c;主要用于有限元仿真&#xff0c;其次兼顾一部分AI机器学习的工作&#xff0c;于是博主就入手了一张英伟达Tesla M40的12G显卡GPU。本来博主也纠结过是买M40还是M60&#xff0c;后来在网上看到说M60看…

Java中的锁升级机制

目录 核心思想 Java对象头&#xff08;Object Header&#xff09;与Mark Word 锁升级的详细步骤 1. 无锁&#xff08;No Lock&#xff09; 2. 偏向锁&#xff08;Biased Locking&#xff09; 3. 轻量级锁&#xff08;Lightweight Lock&#xff09; 4. 重量级锁&#xff…

Scikit-learn Python机器学习 - 特征预处理 - 标准化 (Standardization):StandardScaler

锋哥原创的Scikit-learn Python机器学习视频教程&#xff1a; 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识&#xff0c;包括机器学习概述&#xff0c;特征工程(数据…

windows下wsl2 ubuntu开发配置

配置环境变量# 设置方式 命令/文件 生效范围 适用场景 # 临时 export FORCE_UNSAFE_CONFIGURE1 当前终端 临时编译软件 # 用户级永久 ~/.bashrc或~/.profile 当前用户 长期使用&#xff08;单用户&#xff09; # 系统级永久 /etc/environment或/…

网络编程 05:UDP 连接,UDP 与 TCP 的区别,实现 UDP 消息发送和接收,通过 URL 下载资源

一、概述 记录时间 [2025-09-02] 前置文章&#xff1a; 网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 网络编程 02&#xff1a;IP 地址&#xff0c;IP 地址的作用、分类&#xff0c;通过 …

告别线缆束缚!AirDroid Cast 多端投屏,让分享更自由

AirDroid Cast 是一款功能强大的跨平台投屏应用&#xff0c;能够轻松实现手机、电脑之间以及手机之间的屏幕共享与控制。无论是工作演示、在线教学还是游戏直播&#xff0c;AirDroid Cast 都能提供流畅稳定的投屏体验。 1. 下载与安装 您可以通过以下链接下载 AirDroid Cast&…

从零开始学大模型之大模型训练流程实践

大模型训练流程实践 本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型开发 学习视频/籽料/面试题 都在这>>Github<< >>Gitee<< 6.1 模型预训练 在上一章&#xff0c;我们逐步拆解了 LLM 的模型结构及训练过程&#xff0c;从零手…

一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)

第一步&#xff1a;下载anaconda for mac https://zhuanlan.zhihu.com/p/350828057 知乎保姆级教程 https://www.anaconda.com/docs/getting-started/anaconda/install#macos-linux-installation 下载地址 第二步&#xff1a;部署vllm的虚拟环境 https://www.53ai.com/news/Op…

Go语言Range用法全解析

引言Go 语言中的 range 关键字是集合遍历的核心语法结构&#xff0c;它提供了一种高效且类型安全的方式来迭代各种数据结构。range 的设计完美体现了 Go 语言的工程哲学 - 通过最小化的语法提供最大化的功能。标准库中的许多关键组件&#xff08;如 sync.Map、bufio.Scanner 等…

mysql进阶语法(视图)

1、视图概念 是从一个或多个表中导出来的表&#xff0c;它是一种虚拟存在的表&#xff0c;表的结构和数据都依赖于基本表 应用场景&#xff1a; 多个地方用到同样的查询结果该查询结果用到复杂的select语句 视图优点&#xff1a; 简化查询语句&#xff1a;简化用户的查询操作&a…

编程范式:提升抽象能力的思维工具

这是一个编程中的核心概念&#xff0c;它代表了编写程序的一套基本风格、方法论和哲学。学习不同的编程范式&#xff0c;就像学习用不同的工具和思维方式来解决问题&#xff0c;能极大地提升你作为程序员的抽象能力和解决问题的能力。一、什么是编程范式&#xff1f;编程范式 是…