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
英文地址,請注明出處:http://en.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;編程范式 是…