摘要:利用Office COM加載項可以補充和擴展Office應用系統(tǒng)的功能,可以將工作中常用的一些功能,設計成用Office COM加載項來實現(xiàn),由Office COM加載項提供的功能,在整個Office應用程序中都能夠使用,從而能夠減少工作量,提高工作效率。本文介紹了Office COM加載項的工作原理以及用VSTO技術創(chuàng)建Office COM加載項的一般過程。
關鍵詞:VSTO;COM加載項;Office
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)21-6077-03
The Research and Implement of Office COM Add-ins
LI Hao-hong
(Department of Information Engineering, Zhejiang Industry Trade Polytechnic, Wenzhou 325003, China)
Abstract: The Office COM add-ins can be used to complement and extend the functions of Office applications, can be used to work in some of the features designed with the Office COM add-ins to achieve. You can use to reduce workload and improve efficiency by the Office COM add-in provides functions in the Office application program. This paper describes the general process of creating Office COM add-ins by using VSTO technology.
Key words: VSTO; COM add-ins; Office
Microsoft Office 系統(tǒng)辦公軟件由于其具有強大的功能和友好的操作界面,能夠滿足日常辦公過程中的大部分功能,所以應用非常廣泛。由于各行各業(yè)對數據和文檔格式的要求千差萬別以及中國的國情特色,在日常辦公過程中,微軟的Office系統(tǒng)軟件不能滿足我們在工作中的所有需求。我們可以在利用Office系統(tǒng)軟件豐富客戶端功能的基礎上,利用VSTO (Visual Studio 2005 Tools for Office)技術結合.NET平臺的強大功能開發(fā)符合我們工作需求的Office COM加載項,將其集成到Office系統(tǒng)當中,實現(xiàn)工作工程中的特殊功能,擴展Office系統(tǒng)軟件的功能,無疑能夠減輕工作人員的負擔,提高他們處理文件的工作效率。
1 VSTO
在VSTO之前,常用的Office開發(fā)工具是Visual Basic for Application(VBA),VBA是一個簡單的開發(fā)環(huán)境,通過COM技術實現(xiàn)對Office程序中豐富的對象模型進行訪問,從而實現(xiàn)對Office的通訊,完成各種任務。VBA的開發(fā)環(huán)境過于簡單,功能有限,并且有VBA開發(fā)的Office應用程序存在安全隱患以及程序部署方面的缺陷,所以要實現(xiàn)企業(yè)級的具有復雜業(yè)務邏輯以及智能部署程序的要求,就非常困難。
VSTO是一套用于創(chuàng)建自定義Office應用程序的Visual Studio工具包。VSTO將Office應用程序(如Word,Excel)文檔轉換為能夠進行編程的.NET類,利用Visual Studio 2005這個強大功能的開發(fā)環(huán)境,借助.NET平臺的豐富類庫,開發(fā)人員可以用Visual Basic 2005或者Visual C#語言進行Office應用程序開發(fā),通過PIA(Primary Interop Assemblies,主互調程序集)訪問Office應用程序中豐富的Office對象模型,實現(xiàn)復雜的Office解決方案。
2 三種Office解決方案模式
Office解決方案一般可以分為三種模式。第一種是Office自動化程序,該模式是獨立于Office的程序,用于控制和自動化處理某個Office應用程序,能夠啟動Office應用程序,為了完成某些任務而對其進行自動化。自動化代碼是在其自己而非Office的進程中進行,并且通過跨進程的方式與正被它自動化的Office進程進行信息交互。第二種模式是Office COM加載項,COM加載項是以.dll形式的程序集出現(xiàn)的,Office應用程序在需要時可以加載和創(chuàng)建它。加載項可以直接在Office應用程序的進程中運行,不需要在獨立于Office應用程序進程的進程中運行,加載項在Office應用程序的整個生命其中都保持加載狀態(tài)。第三種模式時文檔代碼模式,該模式在Office自帶的VBA中得到了廣泛的應用,把編寫的代碼和特定的文檔或模板關聯(lián)在一起。使用VSTO同樣可以把文檔和C#或VB代碼關聯(lián)在一起,在文檔打開的同時,文檔中的代碼能夠對Office應用程序定制。
3 Office COM加載項
Office應用程序可以加載DLL形式程序集的COM加載項,必須在DLL程序集中實現(xiàn)IDTExtensibility2接口的類,將這個類在注冊表中進行注冊后,就可以使用COM加載項。
3.1 IDTExtensibility2接口
IDTExtensibility2接口是開發(fā)Office COM加載項的關鍵技術,所有Office應用程序都使用該接口與COM加載項實現(xiàn)信息交互,IDTExtensibility2接口具有在Office應用程序對象模型中傳遞數據的能力。該接口包含下面5個方法(用Visual Basic.Net描述):
Public Interface IDTExtensibility2
Sub OnConnection (…)
Sub OnAddInsUpdate(…)
Sub OnStartupComplete (...)
Sub OnBeginShutdown (...)
Sub OnDisconnection (...)
End Interface
Office應用程序將COM加載項加載到Office應用程序時,會從前到后依次調用上面的5個方法,我們可以在相應的這5個方法中編寫合適的代碼,即可完成特定的功能。
3.2 創(chuàng)建Office COM加載項
以財務報表中常用將Excel軟件中當前單元格的小寫金額轉化為大寫金額為例,介紹開發(fā)和部署Office COM加載項的步驟。在Visual Studio 2005開發(fā)環(huán)境中,創(chuàng)建一個新項目,類型選擇“其他項目類型”|“擴展性”|“共享的外接程序”,根據向導一步步完成即可。在向導的第2步,只選擇Microsoft Excel為應用程序主機,即只作為Excel軟件的COM加載項。最終解決方案會自動創(chuàng)建兩個項目,包括COM加載項項目和相應的安裝項目。在項目中引用“Microsoft Excel 11.0 Object Library”和“Microsoft Office 11.0 Object Library”兩個類庫,Office COM項目會自動創(chuàng)建一個connect類,該類中包含了IDTExtensibility2接口的5個方法。
在connect類中,定義一個公共靜態(tài)字段str,用于保存當前單元格的值,在IDTExtensibility2接口的相應的方法中編寫代碼。關鍵代碼如下:
imports Extensibility
Imports System.Runtime.InteropServices
Imports Office = Microsoft.Office.Core
Imports Excel = Microsoft.Office.Interop.Excel
……..
Public Class Connect
Implements Extensibility.IDTExtensibility2
Private applicationObject As Excel.Application
Private addInInstance AsOffice. COMAddIn
Public Shared str As String = \"\"
Private WithEvents MyButton AsOffice. CommandBarButton
……
Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
Dim commandBars As Office.CommandBars
Dim standardBar As Office.CommandBar
commandBars = Me.applicationObject.CommandBars
standardBar = commandBars(\"Standard\")
If MyButton Is Nothing Then
MyButton = CType(standardBar.Controls.Add(1), _
Office.CommandBarButton)
MyButton.Caption = \"大寫轉換\"
MyButton.Style = Office.MsoButtonStyle.msoButtonCaption
End If
End Sub
Public Sub OnConnection(…..) Implements Extensibility.IDTExtensibility2._
OnConnection
applicationObject = CType(application, Excel.Application)
addInInstance = CType(addInInst, Microsoft.Office.Core.COMAddIn)
End Sub
Private Sub MyButton_Click(…..) Handles MyButton.Click
Dim form As New Form1
str = CType(applicationObject.ActiveCell.Value, String)
form.ShowDialog()
End Sub
End Class
Form1是項目中自定義的窗體,如圖1中窗體對話框所示。在其加載事件中,將connect類的靜態(tài)字段str的值,轉換為大寫金額,顯示在窗體上。在“復制”按鈕的單擊事件中,將大寫金額復制到粘貼板上中。
在該項目運行時,Office COM加載項在Excel軟件運行時,自動加載進了Excel軟件進程中。在標準工具欄中,出現(xiàn)了一個自定義“大寫轉換”按鈕,當單擊按鈕“大寫轉換”時,將Excel中的當前單元格中的小寫金額轉換成大寫金額,顯示在窗體對話框中,單擊“復制”按鈕后,會將大寫金額復制到粘貼板中?;氐紼xcel軟件中,將鼠標定位到“c6”單元格的編輯框中,用常規(guī)的粘貼方法,即可將大寫金額內容粘貼到指定單元格中。
3.3 部署Office COM加載項
在客戶機器上要加載Office COM加載項,必須使客戶機器上有托管程序運行的環(huán)境,在客戶機器上要安裝如下的程序:
1) 安裝.net framework 2.0
2) 安裝Microsoft并安裝SP1或SP2
3) 安裝Office 2003 PIA(主互操作集)
4) 安裝VSTO運行庫
將安裝項目中的文件夾“bin\\debug\\”下的setup.exe文件在客戶機器上安裝運行,Office COM加載項會自動安裝在客戶機器上。在客戶機的注冊表中會注冊Office COM加載項。打開Excel軟件,就能在Excel軟件的標準工具欄上看到添加的按鈕“大寫轉換”,能夠實現(xiàn)在開發(fā)環(huán)境中相同的功能。
4 結束語
由于Office COM加載項是在在Office應用程序的進程中運行的,在整個Office應用程序運行過程中都可用,可以利用VSTO技術借助.NET平臺的強大功能將用戶需求的功能開發(fā)成Office COM加載項,在Office應用程序啟動后,COM加載項即集成到了Office應用程序當中,對用戶而言,就像是Office應用程序的功能擴展,使用起來非常方便。
參考文獻:
[1] 朱強,原小艷.托管Office COM加載項的設計與實現(xiàn)[J].計算機時代,2006,4.
[2] Eric Carter,Eric Lippert.VSTO開發(fā)指南――使用Visual Basic 2005 進行基于Excel,Word,Outlook,InfoPath的Office開發(fā)[M].北京:電子工業(yè)出版社,2008.
[3] 曾凱寧.Excel開發(fā)新技術VSTO_NET在導線測量中的應用[J].山西建筑,2009.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文