目录

apache-poi与Office-Open-XML关系

apache poi与Office Open XML关系

https://i-operation.csdnimg.cn/images/cf31225e169b4512917b2e77694eb0a2.pngApache POI与OOXML的关系解析

以下内容来自AI

官方规范

java中针对Office Open XML的实现

Apache poi中各个组件

组件缩写主要处理格式核心 Maven Artifact ID (依赖)英文全称中文含义与解释核心作用
POIFSOLE2 文件系统 (所有二进制格式的基础)poiPoor ​Obfuscation ​Implementation ​File ​System简陋混淆实现文件系统 (一个幽默的名字) POI 最底层核心,用于处理微软OLE2复合文档格式(.doc, .xls等文件的基础结构)。所有操作二进制Office文档的基础组件
HPSFOLE2 文档属性(如标题、作者等)poiHorrible ​Property ​Set ​Format糟糕的属性集格式 用于从OLE2文档(如.doc, .xls)中提取摘要信息(属性),如标题、作者、主题等。读取文档元数据
HSSFExcel 97-2003 格式 (.xls)poiHorrible ​Spreadsheet ​Stream ​Format糟糕的电子表格流格式 (另一个幽默的名字) 用于处理Excel 97-2003格式(.xls)。读写旧版.xls文件
HWPFWord 97-2003 格式 (.doc)poi-scratchpadHorrible ​Word ​Processor ​Format糟糕的文字处理器格式 用于处理Word 97-2003格式(.doc)。读写旧版.doc文件
HSLFPowerPoint 97-2003 格式 (.ppt)poi-scratchpadHorrible ​Slide ​Layout ​Format糟糕的幻灯片布局格式 用于处理PowerPoint 97-2003格式(.ppt)。读写旧版.ppt文件
HDGFVisio 97-2003 格式 (.vsd)poi-scratchpadHorrible ​Diagram ​Format糟糕的图表格式 用于处理Visio 97-2003格式(.vsd)。读取旧版.vsd文件
HPBFPublisher 格式 (.pub)poi-scratchpadHorrible ​Publisher ​Format糟糕的发布者格式 用于处理Publisher格式(.pub)。读取.pub文件
HMEFTNEF (Transport Neutral Encoding Format) 格式Horrible ​Mail ​Encapsulation ​Format糟糕的邮件封装格式 用于处理Outlook的TNEF格式(传输中性封装格式,常见于winmail.dat附件)。解码Outlook富文本邮件附件
HSMFOutlook 邮件格式 (.msg)poi-scratchpadHorrible ​Stupid ​Mail ​Format糟糕的愚蠢邮件格式 用于处理Outlook邮件格式(.msg)。读取.msg文件
XSSFExcel 2007+ OOXML 格式 (.xlsx)poi-ooxmlXML ​Spreadsheet ​Stream ​FormatXML电子表格流格式 用于处理Excel 2007及以后基于OOXML的格式(.xlsx)。读写新版.xlsx文件
XWPFWord 2007+ OOXML 格式 (.docx)poi-ooxmlXML ​Word ​Processor ​FormatXML文字处理器格式 用于处理Word 2007及以后基于OOXML的格式(.docx)。读写新版.docx文件
XSLFPowerPoint 2007+ OOXML 格式 (.pptx)poi-ooxmlXML ​Slide ​Layout ​FormatXML幻灯片布局格式 用于处理PowerPoint 2007及以后基于OOXML的格式(.pptx)。读写新版.pptx文件
XDGFVisio XML 格式 (.vsdx)poi-ooxmlXML ​Diagram ​FormatXML图表格式 用于处理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-litepoi-ooxml-schemas (旧版)
主要作用提供 OOXML 格式核心的、基础的 XML 模式定义(Schemas)​,是正确解析 .xlsx等格式文件所必需的 。在 Apache POI ​5.0.0 版本之前,其作用与 poi-ooxml-lite类似,包含了更完整的 OOXML Schemas 定义 。
出现版本Apache POI ​5.0.0 及以上版本引入,并逐渐取代 poi-ooxml-schemasApache 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。

https://i-blog.csdnimg.cn/direct/7393fb3749de49d5b21599725dc4b58c.png

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

https://i-blog.csdnimg.cn/direct/32b864c8e0d146229a076694d1f68975.png

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)是社区和文档中最广为接受和认可的官方名称由来。