了解 Office 二进制文件格式

**摘要:**了解有关当前和早期 Microsoft Office 产品中使用的二进制文件格式,包括如何使用它们,其基本结构和以编程方式与其交互的主要概念。

上次修改时间: 2015年3月9日

适用范围: Excel 2010 | Office 2007 | Office 2010 | Office client | Open XML | PowerPoint 2010 | SharePoint Server 2010 | VBA | Word 2010

本文内容
什么是二进制文件格式?
哪些版本的 Microsoft Office 使用二进制文件格式文件?
查看基于 Microsoft Office 二进制文件格式的文件中的内容
结论
其他资源

**发布时间:**2011 年 2 月

**供稿人:**Microsoft Corporation

目录

  • 什么是二进制文件格式?

  • 哪些版本的 Microsoft Office 使用二进制文件格式文件?

  • 查看基于 Microsoft Office 二进制文件格式的文件中的内容

  • 创建自定义二进制文件格式查看器

  • 编辑基于 Office 二进制文件格式的文件

  • 结论

  • 其他资源

本文是介绍 Microsoft Office 产品使用的二进制文件格式的系列文章中的第一篇。这第一篇文章笼统地概述了如何使用 Microsoft Office 二进制文件格式,并解释不同格式共有的一些结构特征和主要概念。本系列中的其他文章提供有关各个文件格式的更多详细信息。应将这些文章与 MSDN 上提供的 Office File Format Documents结合起来阅读。

本系列文章仅讨论四个核心 Microsoft Office 产品:Microsoft Word、Microsoft PowerPoint、Microsoft Excel 和 Microsoft Outlook。

什么是二进制文件格式?

二进制文件格式 是主要包含二进制数据的任何文件格式。这包括编译的程序、图像、媒体和多数压缩文件,以及可能包含文本信息但存储为二进制数据的文件。Microsoft Office 产品使用的二进制文件格式就属于后一种情况。非二进制格式可能包括文本 (.txt), .html, .xml 及其派生形式、已解释脚本和源代码文件。

Microsoft Office 二进制文件格式的所有文件数据存在于一个或多个流中。每个流均包含用于存储元数据(如用户和系统信息、文件属性、格式信息、文本内容和媒体内容)的数据结构。这些数据结构表示为主机程序通过其用户界面解释和呈现的多组十六进制数字。

同时,流中的数据结构的组织方式各有不同。最常见的数据单元是记录。记录通常包含一些字段和标记形式的文件元数据。这包括一个或多个指示其他相关记录或其他数据的位置的偏移值。文本存储为表示 ANSI 或 Unicode 字符的数值。图像可存储为外部文件的指针,或存储为其自己的二进制文件格式的嵌入图像,如文件中的 .gif, .jpeg 或 .png。较活跃的内容(如 PowerPoint 幻灯片切换)使用阐释时所需的信息(如切换属性)进行标记,然后由主机程序呈现。

MSDN 库中的以下位置全面介绍了 Microsoft Word、Microsoft PowerPoint、Microsoft Excel 和 Microsoft Outlook 使用的文件格式:Open Specifications/Data Portability/Microsoft Office File Formats/Microsoft Office File Format Documents。您可以从那里直接在 MSDN 网站上或以 .pdf 文件格式打开相应文件格式的完整规范。

备注

在 Microsoft Office 中执行大多数编程任务的推荐方法是使用 Office 主互操作程序集。这些程序集是一组提供可用于 Microsoft Office 的完整对象模型的 .NET 类。本系列文章只涉及高级方案,如未安装 Microsoft Office 的情形。

哪些版本的 Microsoft Office 使用二进制文件格式文件?

本文讨论的 Microsoft Office 二进制文件格式主要由 Microsoft Outlook、Microsoft Excel 和以前版本的 Microsoft Word 和 Microsoft PowerPoint 使用。Microsoft Office Word 2007 和 Office PowerPoint 2007 使用基于 XML 的文件格式作为其默认文件格式,而 Microsoft Excel 2010 使用较新的二进制格式。下表显示适用于特定版本的 Word、Excel、PowerPoint 和 Outlook 的二进制文件格式文件。

文件格式

应用程序版本

MS-DOC

  • Microsoft Word 97

  • Microsoft Word 2000

  • Microsoft Word 2002

  • Microsoft Office Word 2003

MS-PPT

  • Microsoft PowerPoint 97

  • Microsoft PowerPoint 2000

  • Microsoft PowerPoint 2002

  • Microsoft Office PowerPoint 2003

MS-PST

  • Microsoft Outlook 2000

  • Microsoft Outlook 2002

  • Microsoft Office Outlook 2003

  • Microsoft Office Outlook 2007

  • Microsoft Outlook 2010

MS-XLS

  • Microsoft Excel 97

  • Microsoft Excel 2000

  • Microsoft Excel 2002

  • Microsoft Office Excel 2003

MS-XLSB

  • Microsoft Office Excel 2007

需要使用 Microsoft Office 文件但未安装原始主机应用程序的公司也使用基于 Microsoft Office 二进制文件格式的文件。Microsoft 以外的一些常见使用情形包括自定义跨文档搜索工具,从受损文件恢复数据或者为了与其他应用程序兼容而进行读取和写入。

查看基于 Microsoft Office 二进制文件格式的文件中的内容

到目前为止,查看 Microsoft Office 二进制文件的最简单方法是使用创建该文件的主机程序。例如,通过使用 Word 查看 .doc 文件,或使用 PowerPoint 查看 .ppt 文件。该方法可向用户显示内容的视图,如文本、格式和用户界面的一般状态。

您可以使用 Office 可视化工具 offvis.exe 获得结构更清晰的二进制文件视图。通过下面的链接,您可以直接从下载中心下载此工具:https://download.microsoft.com/download/1/2/7/127BA59A-4FE1-4ACD-BA47-513CEEF85A85/OffVis.zip(该链接可能指向英文页面)。将任何 Microsoft Office 二进制文件加载到可视化工具中时,您会看到两个窗格。导航窗格显示原始文件内容,每行均显示当前偏移量、一个十六进制数字链,及其文本表示形式(如果有)。结果窗格显示包含当前数据结构的名称、值、偏移位置、大小和类型的分析结果。下面的屏幕截图显示可视化工具中包含"Hello, world"文本的 .doc 文件的一部分。其中选择了字母"w"。这会导致可视化工具突出显示相应的十六进制数字和数据结构。

图 1. offvis.exe 中呈现的 HelloWorld.doc

Office 可视化工具

创建自定义二进制文件格式查看器

您可以创建自定义查看器,然后利用它来设定特定内容的目标,或熟悉文件格式。您的查看器必须读取数据流,解释其中的结构,并在不同的偏移值之间导航以查找要显示的文本和任何其他内容。对于每个文件类型,这些数据结构都是不同的,但在每种情形下,过程是类似的。

查找基于二进制文件格式的文件中的内容

  1. 读取文件流。

  2. 识别可能包含要查找的内容的结构。

  3. 在第一个结构中,找到指定要查找的下一节的位置的偏移值。

  4. 在流中转到该节。

  5. 重复前面两个步骤,直到找到所需的内容。

  6. 读取并分析内容。

根据您的需要,简单的文本提取程序可能需要不到 100 行代码,模拟原始主机程序可能需要几百万行代码。

编辑基于 Office 二进制文件格式的文件

一般来说,任何时候都不要尝试直接编辑 Microsoft Office 二进制文件,而应使用"保存"操作,这与将文档发送到打印机类似。例如,当打印 Word 文档时,您不会将整个 .doc 文件发送到打印机进行呈现。相反,Word 会创建文档的快照,其格式根据打印机规范进行设置。打印机可能有解释字体的逻辑,但所有布局信息均由发送应用程序处理。

同样,当以二进制格式保存文件时,主机应用程序会在内存中将数据转换为指定的二进制格式,并创建文件。如果已存在具有相同名称的文件,则新文件会覆盖原来的文件。

此方法有诸多优点。

  • 您的应用程序可存储和处理您选择的任何格式的文件内容,这比直接使用二进制数据容易得多。

  • 通过将原始二进制文件读取到内存中一次,然后立即将数据转换为内部表示形式,可避免重新计算指向不同偏移位置的多个指针,因为每次编辑时,这些指针都可能发生变化。

  • 应用程序在内存中拥有文件的内部表示形式后,可将该文件另存为应用程序支持的任何格式。

  • 通过使用共享内部表示形式,应用程序可包括读取多个文件格式的逻辑,然后以同一方式使用这些格式。

所以,编辑二进制格式文件的过程实际上包括三个步骤。

编辑基于二进制文件格式的文件

  1. 将文件读取为内部表示形式。

  2. 在应用程序中编辑该内部表示形式。

  3. 将该表示形式保存为二进制格式,使用与源文件相同的文件名和位置。

结论

了解和使用二进制文件格式可能是个挑战。希望通过了解基础结构和尝试本系列文章中提供的一些过程,您可以仅通过开放规范文档和一些可下载工具来深入研究更复杂的实现方案。

其他资源

有关详细信息,请参阅以下资源: