天天看點

Visual Studio Tools for Office (VSTO) 簡介及資源整理

之是以接觸vsto(visual studio tools for office )是因為接到一個公司的面試通知,需要測試你的學習能力,讓自己以前沒有做過這方面開發的情況下,基于vsto對excel進行二次開發,完成兩個簡單的task。由于網上這方面的資料相對較少,随把自己收集到的一些資料整理處理,希望能對大家有所幫助。

以前的office程式設計一般都是通過vba進行,vba是一個很簡單的開發環境,內建在很多office的産品中。每個office的産品,如word,excel,outlook,都通過com暴露了非常豐富的對象模型,供程式員程式設計。我們就是用vba和這些office的com對象模型對office進行擴充開發的。最常見的是增加一些自定義的按鈕,還有自定義響應一些事件。但是vba有很多不足之處。首先,它隻面對vb腳本語言,并且開發環境顯得簡單,不夠強大。最緻命的是,vba把代碼分别嵌入到每個文檔中去,這導緻萬一出現bug,或者項目需要更新時,就很難處理。需要對于每個文檔進行修改,這種低效率在企業級應用中是無法容忍的。vba的另一個問題:安全保護做得很薄弱,很多人可以利用宏制造病毒。

microsoft想用visual studio .net和.net framework來解決這些問題,是以vsto應運而生。vsto 将.net對word,excel,outlook和infopath的支援加入到visual studio中。vsto将word或excel文檔轉換成了能夠進行程式設計的.net類,使它們成為具有資料綁定功能的控件,我們可以像處理window forms控件和其他的.net特征那樣對其進行編碼。

幾乎所有的office程式設計都會使用某個office應用程式對象模型,并對它進行編碼。對象模型是一組由office應用程式提供的對象,正在運作的代碼可用他們來控制office應用程式。每個office應用程式對象模型都按照層次結構進行組織,層次結構中的跟對象為“application”。不能通過根對象application直接通路其他對象,但可以通過轉換路徑通路。(word和excel對象模型的層次結構如下圖)

Visual Studio Tools for Office (VSTO) 簡介及資源整理

.net中與office互動的托管程式集被稱為office主互調程式集(pia)。

所有的office對象模型都是用非托管代碼(c和c++)編寫的,并提供com接口。為了在托管代碼(c#或vb)中與這些接口進行通信,我們必須使用封裝器,通過它來實作托管代碼與office的非托管com接口之間的協同工作。該封裝器是一系列的.net類,它們被編譯成為pia的程式集。

值得注意的是properties與methods的差別:屬性也有帶參數的屬性get/set方法,methods也有不帶參數的get/set方法,一個重大差別就是屬性是“全局”的,你修改完會一直起作用,而方法一般隻在目前會話生命期中才會有用。 此外屬性一般隻會建立隻讀屬性,不會設定隻寫屬性。若需要隻寫屬性,一般用方法代替。

1. 書籍類:

2. 代碼類:

兩個task的簡單執行個體: 

3. 相關部落格:

vsto 從零開始 

vsto 簡介與發展 

 vsto之旅系列(一):vsto入門 http://www.cnblogs.com/zhili/archive/2012/09/03/vsto.html

4. 官方資源: