天天看点

《北塔教你做插件 从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开发的朋友,愿能给您带来一点儿启迪,别无他求。

本章完!   北塔版权所有,转载请注明出处。

继续阅读