天天看點

《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

前言:       “Visual Studio Tools for Office”是微軟針對Office開發而推出的工具集,可以使用VB或C#擴充Office應用程式。最大的變化是使用VS開發環境來建構你的程式,而不再像以前一樣使用VBA。本章的主要内容是分析微軟推出VSTO的真正目的與使用方法,以及對VSTO優勢與不足的梳理。 PS:VSTO到目前五個版本的發展,不是本講解的重點,相關資訊可以問度娘。 目錄:

  1. 了解VSTO從Hello Ribbon開始
  2. Ribbon的酒杯——IRibbonExtensibility
  3. 我眼中VSTO的發展

第一節、了解VSTO從Hello Ribbon開始     在《笑傲江湖》中華山派有氣宗和劍宗之分,雙方鬥争了幾十年。簡而言之,氣宗注重内在的修為,劍宗申明技法的高義。然地無分南北,俠無分氣劍。最終令狐大俠以獨孤九劍橫掃武林,你說他是氣宗還是劍宗?     天地之道,剛柔互用,不可偏廢。技術也是一樣,有時需要懂理法,有時需要知技法,技與術本來就是互補。這系列講義,是從基礎知識入手還是先講實作方法?我也很猶豫。不過我明白,看這篇文章的人,重點不是尋求VSTO的實作邏輯,而是項目中用到MSAddin時如何下手、如何實作,如何更新舊的技術,用最新的VS建構某些功能。     按照這一指導思想,我以VS2010開始,一步步地教大家如何實作一個MSAddin插件。而開發時如果遇到不明确的或遺漏的,歡迎給我留言,我會繼續修訂! 1、使用C#VSTO建立Word Addin工程。     如下圖所示,在VC10的"Create Office Project"中與Word相關的内容有三項,可分為兩類:

  • Application level :Word Addin ,應用于整個MSWord應用程式,常用作簽章、簽名等全文檔操作。
  • Document level    :Document、Template,應用于單個文檔,如特定報表、數學模型等專業性和針對性較強的操作。
《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

2、添加Ribbon可視化設計器(Ribbon Designer)    右鍵"Solutioin"中目前項目,Add-〉New Item,添加如圖所示的“Ribbon Designer”。

《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

    自此,魂牽夢繞的可視化Ribbon設計器已經展現在你的面前了。我們拽入兩個Button,将其中一個的ControlSize設為“RibbonControlSizeLarge”。

《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

   在“Ribbon Designer”中輕按兩下Button,引入“button_Click”,加入MessageBox.Show() 3、F5編譯運作吧!

《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

     如果你的人品不是特别低的話,響應Button的Messagebox已經彈出來了。      如果真是沒彈出來,别着急,總共就三步重新來一次,祝你好運! 第二節、Ribbon的酒杯——IRibbonExtensibility      我們用了非常簡單的方法,就建立了具有Ribbon風格的Word_Addin插件,但我們還不知道Ribbon風格界面是如何描述、如何運作的?     在工程中,右鍵Ribbon設計器中的Ribbon1界面,可通過"Export Ribbon to xml"菜單得到RibbonXml與Ribbon.cs檔案:     

  • RibbonXml為定義菜單的描述檔案。
  • Ribbon.cs包含了處理代碼。
《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

Ribbon.Xml檔案描述如下。可以清晰地展現出"Ribbon->Tabs->Group->Command"之間的層級關系。

<?xml version=" 1.0" encoding=" UTF-8"?>
<customUI onLoad=" Ribbon_Load" xmlns=" http://schemas.microsoft.com/office/2006/01/customui ">
    < ribbon>
        < tabs>
            < tab idMso ="TabAddIns " label ="RTab ">
                < group id ="group1 " label ="New Group ">
                    < button id ="button1 " label ="button1 " size ="large " />
                    < button id ="button2 " label ="button2 " showImage ="false " />
                </ group>
            </ tab>
        </ tabs>
    </ ribbon>
</customUI>
           

備注:第三方Ribbon.xml編寫工具我用過幾個,其中印象最深的當屬" Office Ribbon Editor "。在以後的工作中,各位也許會用得到。 我附上下載下傳位址:Office Ribbon Edit 4.5

《北塔教你做插件 從RibbonX開始》第二講:首建Ribbon——VSTO的星際穿越

Ribbon.cs檔案中給我們最大的啟發有兩條:

  1. 對基類IRibbonExtensibility的引入。
  2. GetCustomUI()方法的支援。
namespace Microsoft.Office.Core
{
    // Summary:
    //     The interface through which the Ribbon user interface (UI) communicates with
    //     a COM add-in to customize the UI.
    [ TypeLibType(4160)]
    [ Guid("000C0396-0000-0000-C000-000000000046" )]
    public interface IRibbonExtensibility
    {
        // Summary:
        //     Loads the XML markup, either from an XML customization file or from XML markup
        //     embedded in the procedure, that customizes the Ribbon user interface.
        //
        // Parameters:
        //   RibbonID:
        //
        // Returns:
        //     String
        [ DispId(1)]
        string GetCustomUI(string RibbonID);
    }
}
           

      自此,我們對“Hello Ribbon”示例的了解已經上升了一個層次。我們不僅會使用IDE建立Ribbon工程,我們還知道Ribbon菜單的定義規則,更重要的我們已經知道Ribbon菜單的載入原理。為我們已後使用 非托管方式 ,如ATL建立MSOfficeAddin插件奠定了理論基礎。       吃程式員這口飯,我們時常一會兒缺酒,一會兒缺酒杯。現在葡萄美酒夜光杯拿在我手,還差的隻有天空明月,對席良朋! 第三節、我眼中VSTO的發展       到上一小節為止,我認為"Hello Ribbon"的工作已經完成了。當然,這個樣例隻能将您帶到Ribbon的門口,能走多遠,要看際遇。不過,我願與您同行!      對Office擴充開發的手段,大體有三種途徑,我對其适用範圍概括如下:      第一、用VB建立Office解決方案多用于:     

  1. 非托管插件編寫方式,禁止.Net環境在使用者電腦上安裝的情況下。
  2. 為Office2003以及更低的版本開發。
  3. 為MS Access建立應用。

     第二、用VSTO建立的Office解決方案多用于:

  1. 非常直覺且高效地設計Ribbon功能區和更豐富的控件集。
  2. 建立具有穩定安裝和解除安裝的Addin插件。
  3. 提供多種程式設計(Template、Document、Application)模型擴充Office對象。

     第三、使用ATL建立的Office解決方案多于用:

  1. 非BASIC解釋性語言,隐藏代碼實作邏輯。
  2. 更高的性能,非托管附加元件可以獲得更好的性能、更快的加載速度。
  3. 對消息處理的支援。
  4. 在OA、MIS中可以使用<object>标簽中codebase實作統一部署和自動更新。     

     Office解決方案的實作手段,沒有孰優孰劣,隻有哪個更合适、更高效、更簡潔。 總結與後記:      本章的内容是通過C#中的VSTO,簡要介紹Office插件開發。有興趣的朋友也可以通過VB中的VSTO實作上述樣例,沒有太大差别,同樣的Ribbon Designer,同樣的IRibbonExtensibility,不同的隻有文法的表述。    源碼下載下傳(不需積分):    C#工程下載下傳:WordAddIn1     VBA工程下載下傳:WordAddin2 

     大家有沒有想過,微軟推出VSTO,在C#與VB工程中都支援,但Visual C++工程卻沒有。就實作手段來說,Office辦公套件中的Word、Excel元件,都是非托管代碼編寫的。而托管代碼C#建立的解決方案卻能與Office進行互動!

  • 此番舍簡就繁到底是為了什麼?
  • 托管VSTO如何與Office進行互動?
  • VSTO發展到今天,為什麼還存在相當多VC工程建立的解決方案?

     我始終堅信,解決問題的方法與思路,比熟練掌握一些工具更重要!這些認識需要正确的引導與個人的領悟。      這些年,我也是斷斷續續做一些圍繞Office的開發工作,涉及的範圍很廣,但領悟都不算深刻。人之患,在好為人師!編寫這系列教程,一是梳理下相關知識點,加深印象;二是為了初行Office開發的朋友,願能給您帶來一點兒啟迪,别無他求。

本章完!   北塔版權所有,轉載請注明出處。

繼續閱讀