微軟官方知識:瞭解 Office 二進制文件格式

摘要:瞭解有關當前和早期 Microsoft Office 產品中使用的二進制文件格式,包括如何使用它們,其基本結構和以編程方式與其交互的主要概念。

適用範圍: Microsoft Word | Microsoft PowerPoint | Microsoft Excel | Microsoft Outlook

發佈時間:2011 年 2 月

供稿人:Microsoft Corporation

目錄

本文是介紹 Microsoft Office 產品使用的二進制文件格式的系列文章中的第一篇。這第一篇文章籠統地概述瞭如何使用 Microsoft Office 二進制文件格式,並解釋不同格式共有的一些結構特徵和主要概念。本系列中的其他文章提供有關各個文件格式的更多詳細信息。應將這些文章與 MSDN 上提供的 Microsoft 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 使用的文件格式:Microsoft Office File Format Documents (該鏈接可能指向英文頁面)。您可以從那裏直接在 MSDN 網站上或以 .pdf 文件格式打開相應文件格式的完整規範。

Gg615407.note(zh-cn,office.14).gif註釋:

在 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 獲得結構更清晰的二進制文件視圖。通過下面的鏈接,您可以直接從下載中心下載此工具:http://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. 將該表示形式保存爲二進制格式,使用與源文件相同的文件名和位置。

結論

瞭解和使用二進制文件格式可能是個挑戰。希望通過了解基礎結構和嘗試本系列文章中提供的一些過程,您可以僅通過開放規範文檔和一些可下載工具來深入研究更復雜的實現方案。

其他資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章