Office Open XML

Office Open XML（縮寫：Open XML、OpenXML或OOXML），為由Microsoft開發的一種以XML為基礎並以ZIP格式壓縮的電子文件規範，支持文件、表格、備忘錄、幻燈片等檔案格式。

OOXML在2006年12月成為了ECMA規範的一部分，編號為ECMA-376；並於2008年4月通過國際標準化組織的表決，在兩個月後公佈為ISO／IEC 29500國際標準。微軟推出這個格式，很多人認為是出於商業考量。許多專家指出，該標準並不是個完整的標準，採用了許多微軟的獨有規格，使用上困難重重。

從Microsoft Office 2007開始，Office Open XML文件格式已經成為Microsoft Office默認的文件格式。Microsoft Office 2010支持對ECMA-376標準文檔的讀操作，ISO/IEC 29500 Transitional的讀/寫，ISO/IEC 29500 Strict的讀取。Microsoft Office 2013同時支持ISO/IEC 29500 Strict的讀寫操作。

它的競爭對手是OpenDocument Format，後者是被廣泛接受的一種開放的文檔存儲和交換規範。

## 版本

存在以下幾個版本的Office Open XML標準。

### ECMA 376

ECMA 376，目前歷經4個版本，第1版（2006年12月）、第2版（2008年12月）、第3版（2011年6月）、第4版（2012年12月）。

### ISO/IEC 29500

ISO/IEC 29500目前最新的版本為2012年的版本ISO/IEC標準的結構分為四部分。第1、2和3是獨立的標準，第2部分用於其他文件格式，包括Design_Web_Format和XPS格式。第4部分作用是讀出第1部分的變體。

- 第1部分（基礎知識和標記語言參考）
- 第2部分（解包約定）
- 第3部分（標記兼容性和可擴展性）
- 第4部分（過渡期遷移特性）

## 批評

微軟公司發表的Office Open XML使用許多非標準的規範，造成與其他辦公室軟體（例如LibreOffice）讀取時發生不相容或內容偏移的情形，目的是讓Microsoft Office保持市場優勢。

ODF(廣泛接受的開放文檔規範)編碼時會使用其他標準規範(如ISO 639、MathML)來進行儲存，但OOXML使用非標準的編碼進行存取。例如 ODF 裡面的顏色代碼，不管是試算表、文件、簡報等，紅色的代碼都是 #FF0000，然而在OOXML裏隨不同產品，代碼分別為：

- Word：#FF0000
- Excel：#FFFF0000
- Powerpoint：#FF0000

OOXML設計的目的是將微軟定義的 doc、ppt、xls 二進制格式轉成 XML 格式，並沒有依照 XML 的特性最佳化，而其私有格式內含的額外非標準元件也包含在內，例如ActiveX等等（過時，且容易用於攻擊）；另一方面，比爾·蓋茨在1998年留下的備忘錄提到「不能讓其他瀏覽器可完美顯示MS Office文件，只能讓自家公司的專屬IE可正確顯示」，現在的狀況可以說是微軟延續了比爾·蓋茲的精神，使「現代的MS Office存出的OOXML檔」刻意做成第三方軟體不能完善地解讀、呈現，顯示OOXML並非如其所聲稱的開放。

## Open XML Format SDK

Microsoft Open XML Format SDK包含一套託管代碼庫用於編程以創建、操縱Office Open XML文件。並不用於代替Microsoft Office Object Model，也不提供文件格式的頂層抽象。使用Open XML SDK必須理解文檔格式結構。對Word文檔不提供諸如layout功能；對Excel文檔，不提供諸如重新計算、數據刷新等功能。

- 版本1.0發布於2008年6月10日。配合Office Open XML規範的ISO/IEC標準化過程。
- 版本2.0：用於.NET 3.5應用程式。支持使用.NET的強類型類來直接表示XML的element/attribute/value、使用Office Open XML schema驗證Office Open XML文檔、在Office Open XML文檔中搜索。該SDK建於System.IO.Packaging API之上。使用了.NET Framework Language-Integrated Query (LINQ)技術用強類型。把很多操作Open XML packages封裝為API，以簡化使用。
- 版本2.5：用於.NET 4.0應用程式。發布於2014年6月並在GitHub上開源。這是目前最高版本。支持Office 2013的一些新的類。讀取 ISO/IEC 29500 Strict Format文檔。

Open XML SDK 2.5 Productivity Tool for Microsoft Office提供許多特性，如給予文檔內容產生Open XML SDK 2.5原始碼，比較源與目標Open XML documents以產生原始碼從源創建目標文檔、驗證文檔、顯示文檔，ECMA376v1標準，Microsoft Office實現註解。

通常安裝在 C:\Program Files (x86)\Open XML SDK\V2.5\。

一個Open XML文檔包含多個文檔部分（document part）。ZIP格式支持任意訪問各個部分。例如，一個slide頁面、Word文檔中的comment，都是獨立的文檔部分。一個Open XML文檔就是一個Open Packaging Conventions (OPC)包(package)。每個文檔部分有個部分名字，由一系列segments或一個pathname組成，如"/word/theme/theme1.xml"。包的Content_Types.xml部分，用於確定包中所有文檔部分的內容類型。

### SpreadsheetML文檔

SpreadsheetML文檔包含`<workbook>`元素，其內部包含`<sheets>`與`<sheet>`元素用於表示各個工作表。每個工作表被創建為一個獨立的XML文件。一個spreadsheet文檔還可以包含`<table>`、 `<chartsheet>`、 `<pivotTableDefinition>`等元素。

在命名空間DocumentFormat.OpenXML.Spreadsheet中定義了spreadsheet中重要的elements：

Package Part｜Top Level SpreadsheetML Element｜Open XML SDK 2.5 Class｜描述

Workbook｜workbook｜Workbook｜主文檔part的根元素

Worksheet｜worksheet｜Worksheet｜A type of sheet that represent a grid of cells that contains text, numbers, dates or formulas.

Chart Sheet｜chartsheet｜Chartsheet｜A sheet that represents a chart that is stored as its own sheet.

Table｜table｜Table｜A logical construct that specifies that a range of data belongs to a single dataset.

Pivot Table｜pivotTableDefinition｜PivotTableDefinition｜A logical construct that displays aggregated view of data in an understandable layout.

Pivot Cache｜pivotCacheDefinition｜PivotCacheDefinition｜A construct that defines the source of the data in the PivotTable.

Pivot Cache Records｜pivotCacheRecords｜PivotCacheRecords｜A cache of the source data of the PivotTable.

Calculation Chain｜calcChain｜CalculationChain｜A construct that specifies the order in which cells in the workbook were last calculated.

Shared String Table｜sst｜SharedStringTable｜A construct that contains one occurrence of each unique string that occurs on all worksheets in a workbook.

Conditional Formatting｜conditionalFormatting｜ConditionalFormatting｜A construct that defines a format applied to a cell or series of cells.

Formulas｜f｜CellFormula｜A construct that defines the formula text for a cell that contains a formula.

## 基本資料

- 日語原文：Office Open XML Document
- 擴展名：.docx, .docm
- mime：application/vnd.、openxmlformats-officedocument.、wordprocessingml.、document
- 所有者：微軟, Ecma, ISO/IEC
- 發行日期：2006年12月7日
- 最新版本：第3版
- 最新版本：2012年8月15日
- 類型：文件檔案格式
- 擴展自：XML, DOC, WordProcessingML
- 標準：ECMA-376, ISO/IEC 29500
- 網站： ECMA-376, ISO/IEC 29500-1:2012
- 日語原文：Office Open XML Presentation
- 擴展名：.pptx, .pptm
- mime：application/vnd.、openxmlformats-officedocument.、presentationml.、presentation
- 最新版本：2011年6月29日
- 類型：簡報
- 擴展自：XML, PPT
- 網站： ECMA-376, ISO/IEC 29500:2008
- 日語原文：Office Open XML Workbook
- 擴展名：.xlsx, .xlsm
- mime：application/vnd.、openxmlformats-officedocument.、spreadsheetml.、sheet
- 最新版本：第三版
- 類型：電子試算表
- 擴展自：XML, XLS, SpreadsheetML