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