概要
自動化和 COM
從 Visual C++ 使用自動化的三種方法
如何使用 Office 類型庫
使嵌入的 Office 組件自動運行
參考
一、概要
您可以使用自動化功能從 Visual C++ 應用程式中控制 Microsoft Office 組件。本文提供使 Office 自動運行所需的基本資料以及指向相關資源和範例程式碼的指標。
息自動化(以前稱為 OLE 自動化)是一種技術,該技術允許您利用現有程式的功能並將其合并到您自己的應用程式中。例如,您可以在應用程式中使用 Microsoft Word 的拼字和語法檢查功能,而不讓使用者看到 Microsoft Word。您甚至可以使用 Microsoft Excel 的所有圖表、列印和資料分析工具。該技術可以大大簡化和加快您的開發。
二、自動化和 COM
自動化建立在元件物件模型 (COM) 的基礎上。COM 是一種基於介面的標準軟體結構,旨在將代碼分離為獨立的對象。可以將它看作是物件導向編程 (OOP) 範例的擴充,但是它也適用於單獨的應用程式。每個對象都公開一組介面,到對象的所有通訊(如初始化、通知和資料轉送)都是通過這些介面進行的。
COM 還是隨作業系統一起安裝的動態連結程式庫 (DLL) 所提供的一組服務。自動化會用到其中的許多服務。其中一個樣本就是“封送處理”服務,該服務將用戶端應用程式的調用打包到伺服器應用程式介面的成員函數中,然後將這些函數及其參數傳遞給伺服器應用程式。伺服器的介面可能會在用戶端的記憶體空間中公開,但是,如果用戶端是 .exe 檔,而且在自己的進程空間運行,則不會出現這種情況。封送處理還可以跨越進程邊界從伺服器的方法中擷取傳回值,並將這些值安全地傳遞給用戶端調用。
各種 COM 庫提供了對自動化非常重要的許多其他服務。關於這些服務的資訊來源包括: ? “Inside OLE - Second Edition”,Kraig Brockschmidt 著,ISBN 1-55615-843-2
? “Inside COM”,Dale Rogerson 著,ISBN 1-57231-349-8
? “Automation Programmer's Reference”,ISBN 1-57231-584-9
三、從 Visual C++ 使用自動化的三種方法
可通過以下三種基本方法來使用自動化:MFC、#import 和 C/C++: ? 藉助於 MFC,您可以使用 Visual C++ ClassWizard 從 Microsoft Office 類型庫產生“封裝類”。這些類以及諸如 COleVariant、COleSafeArray 和 COleException 之類的其他 MFC 類可簡化自動化任務。此方法優於其他方法,通常建議使用該方法,並且大部分 Microsoft 知識庫樣本都使用 MFC。
? #import 是 Visual C++ 5.0 中引入的一個新指令,它可以從指定的類型庫建立 VC++“智能指標”。它的功能非常強大,但通常不建議使用它,因為它與 Microsoft Office 應用程式一起使用時,經常會出現引用計數問題。
? C/C++ 自動化要困難得多,但有時為了避免由於使用 MFC 時所造成的開銷或避免使用 #import 時所出現的問題,需要使用該方法。基本上,您會用到 CoCreateInstance() 這樣的 API 以及諸如 IDispatch 和 IUnknown 之類的 COM 介面。
必須注意,C++ 中的自動化與普通的 C 中的自動化稍有不同,因為 COM 是圍繞 C++ 類設計的。 有關使用 C 進行自動化的其他資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
181473 (http://support.microsoft.com/kb/181473/) 如何在 C 應用程式中而不是在 C++ 中使用 OLE 自動化
四、如何使用 Office 類型庫
類型庫與 C/C++ 標頭檔類似。它包含伺服器發布的介面、方法和屬性。您可以使用 Visual C++ 附帶的 OLE/COM 物件查看器 (Oleview.exe) 來查看類型庫。下面列出了 Microsoft Office 95、Microsoft Office 97、Microsoft Office 2000 和 Microsoft Office XP 的類型庫檔案名稱:
Office 應用程式 類型庫
Word 95 及更低版本 wb70en32.tlb
Excel 95 及更低版本 xl5en32.olb
PowerPoint 95 及更低版本 PowerPoint.tlb
Access 95 及更低版本 msaccess.tlb
Binder 95 binder.tlb
Schedule+ sp7en32.olb
Project pj4en32.olb
Team Manager mstmgr1.olb
Word 97 msword8.olb
Excel 97 excel8.olb
PowerPoint 97 msppt8.olb
Access 97 msacc8.olb
Binder 97 msbdr8.olb
Graph 97 graph8.olb
Outlook 97 msoutl8.olb
Outlook 98 msoutl85.olb
Word 2000 msword9.olb
Excel 2000 excel9.olb
PowerPoint 2000 msppt9.olb
Access 2000 msacc9.olb
Outlook 2000 msoutl9.olb
Word 2002 msword.olb
Excel 2002 excel.olb
PowerPoint 2002 msppt.olb
Access 2002 msacc.olb
Outlook 2002 msoutl.olb
Office Word 2003 msword.olb
Office Excel 2003 excel.exe
Office PowerPoint 2003 msppt.olb
Office Access 2003 msacc.olb
Office Outlook 2003 msoutl.olb
這些類型庫為您提供了有關需要使用的對象、方法和屬性的資訊。學習如何導航 Word、Excel 和 Powerpoint 的物件模型的最佳方法是使用這些 Office 應用程式中的宏錄製器:
1. 從工具菜單上的宏選項中選擇錄製新宏,然後執行您感興趣的任務。
2. 從工具菜單上的宏選項中選擇停止錄製。
3. 完成錄製後,從工具菜單上的宏選項中選擇宏,選擇您錄製的宏,然後單擊編輯。
您將看到產生的 VBA 代碼,該代碼可完成您所錄製的任務。記住,錄製的宏在大多數情況下並不是最佳代碼,但它可以提供快捷可用的樣本。
五、使嵌入的 Office 組件自動運行
要使嵌入的 Office 對象或應用程式自動運行,您需要擷取該對象的 IDispatch 指標。Visual C++ 技術說明 39 (TN039) 中提供了該指標。您可以在“Visual C++ 參考”的“Microsoft 基礎類庫”中找到該技術說明。要擷取分步樣本,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
184663 (http://support.microsoft.com/kb/184663/) 如何使用 MFC 嵌入並自動化 Microsoft Excel 工作表
參考
David Kruglinski 的“Inside Visual C++”(ISBN:1-57231-565- 2)第 24 章概述了該內容並提供了一些很好的樣本。此外,Microsoft 知識庫也是一個很好的資訊來源。
有關其他資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
152023 (http://support.microsoft.com/kb/152023/) 尋找用來學習自動化的資源