Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第2章:Open XML —— Word格式的现代化之路

学习目标

  • 了解Word格式的演化历史
  • 理解为什么会从二进制演变为XML
  • 了解Open XML的标准化过程
  • 理解向后兼容性的挑战

2.1 Word格式的演化简史

1. 二进制时代(1983-2006)

Word 1.0于1983年发布,从那时起一直到Word 2003,Word一直使用自定义的二进制文件格式。

这个阶段的特点:

  • 格式不公开,只有Microsoft掌握完整细节
  • 基于二进制流,解析非常困难
  • 随着Word功能增加,格式越来越复杂
  • 不同Word版本之间存在兼容性问题

即使在今天,一些老旧的文档仍以.doc格式存在。

2. Open XML诞生(2007)

2007年,Microsoft发布Office 2007,带来了全新的Open XML格式,默认扩展名从.doc变为.docx

这次变革的主要原因:

  • 开放性:二进制格式是私有的,XML格式开放标准
  • 可互操作性:其他软件更容易正确处理docx文件
  • 压缩存储:基于ZIP压缩,文件更小
  • 容错性:一个部分损坏不会导致整个文件报废
  • 易于处理:XML是标准格式,有大量工具库支持

3. 标准化(2008至今)

  • 2008年:Ecma International将Open XML批准为标准(ECMA-376)
  • 2012年:ISO/IEC将Open XML批准为国际标准(ISO/IEC 29500)
  • 至今:Open XML持续更新,支持新功能

现在,.docx已经成为事实上的办公文档标准,不仅Microsoft Word,LibreOffice、WPS等都支持。


2.2 为什么选择XML

为什么Microsoft选择XML作为新的格式基础?XML有什么优势?

XML的优势

  1. 结构化:XML使用标签清晰地表达结构,便于计算机解析
  2. 自描述:标签本身说明了内容是什么,可读性好
  3. 标准技术:有大量成熟的工具库处理XML
  4. 易于调试:XML是文本,可以直接用文本编辑器打开查看
  5. 扩展性好:新增功能不需要破坏原有格式

对比二进制格式

方面二进制XML
可读性不可读人类可读
解析难度
文件大小未压缩时较大ZIP压缩后更小
扩展性
容错性差(一点坏全坏)好(部分坏部分坏)
工具支持

关于文件大小

你可能会问:XML是文本,比二进制冗余,文件岂不是更大?

实际上:

  • .docx本质是ZIP压缩包,XML文本压缩率很高
  • 实际测试中,相同内容的.docx通常比.doc小30%-50%
  • 现代存储容量很大,文件大小已经不是主要问题

2.3 Open XML标准是什么

Open XML全称是Office Open XML,简称OOXML,是描述Office文档的开放标准。

标准涵盖什么

Open XML不仅仅涵盖Word文档,它涵盖了整个Office:

  • WordprocessingML:处理文字处理文档(就是.docx)
  • SpreadsheetML:处理电子表格(.xlsx)
  • PresentationML:处理演示文稿(.pptx)

本书只关注WordprocessingML,也就是Word文档部分。

两个标准组织

Open XML有两个版本的标准:

  1. ECMA-376:由Ecma International维护,更新更频繁
  2. ISO/IEC 29500:国际标准化组织的国际标准

两者基本一致,细节略有差异。对于大多数开发者,不需要关心这些细节差异。

在哪里获取标准

官方标准可以从以下位置获取:

  • Ecma官网:https://www.ecma-international.org/publications-and-standards/standards/ecma-376/
  • ISO官网:https://www.iso.org/standard/51407.html

标准文档非常详尽(几千页),但也非常枯燥。本书会提取开发者真正需要知道的内容,不需要你去阅读几千页的原始标准。


2.4 向后兼容性的挑战

格式变革带来了很多好处,但也带来了兼容性问题。

兼容性问题

  • 使用Word 2003及更早版本无法直接打开.docx文件
  • Microsoft为此发布了兼容包,可以让旧版本Word打开docx
  • 现在绝大多数用户已经升级到支持docx的版本
  • 但一些非常老旧的系统仍可能遇到问题

兼容性处理建议

开发中处理Word格式时:

  1. 优先使用.docx:这是现在的主流,几乎所有软件都支持
  2. 只在需要时支持.doc:如果用户确实有旧文档需求再支持
  3. 转换为docx处理:收到doc文件可以先转换为docx再处理
  4. 不要生成新的doc:新生成的文档都应该用docx格式

2.5 当前格式生态

现在的.docx格式生态是怎样的?

支持.docx的软件

  • Microsoft Word 2007及以后版本
  • LibreOffice / OpenOffice
  • WPS Office
  • Google Docs(可导入导出)
  • 大多数现代文字处理软件

编程库支持

因为是开放标准,现在有很多编程语言库可以处理docx:

  • Python:python-docx, python-pptx, docx2txt
  • Java:Apache POI (XWPF)
  • .NET:Open XML SDK, DocX
  • JavaScript:docx, mammoth
  • PHP:phpword

本书后续会介绍一些常用库的使用,但重点还是理解格式本身。掌握了原理,你可以在任何语言上使用这些库。


本章小结

  • Word格式经历了从二进制到Open XML的演化
  • XML带来了开放性、可互操作性、更好的容错性
  • Open XML是开放的国际标准,涵盖Word、Excel、PowerPoint
  • 本书只关注WordprocessingML(.docx)部分
  • .docx是现在的主流格式,优先使用docx

现在我们已经有了基础认识,下一章我们动手实践,打开一个docx文件,看看它的庐山真面目。