前言: “Visual Studio Tools for Office”是微软针对Office开发而推出的工具集,可以使用VB或C#扩展Office应用程序。最大的变化是使用VS开发环境来构建你的程序,而不再像以前一样使用VBA。本章的主要内容是分析微软推出VSTO的真正目的与使用方法,以及对VSTO优势与不足的梳理。 PS:VSTO到目前五个版本的发展,不是本讲解的重点,相关信息可以问度娘。 目录:
- 理解VSTO从Hello Ribbon开始
- Ribbon的酒杯——IRibbonExtensibility
- 我眼中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,应用于单个文档,如特定报表、数学模型等专业性和针对性较强的操作。
2、添加Ribbon可视化设计器(Ribbon Designer) 右键"Solutioin"中当前项目,Add-〉New Item,添加如图所示的“Ribbon Designer”。
自此,魂牵梦绕的可视化Ribbon设计器已经展现在你的面前了。我们拽入两个Button,将其中一个的ControlSize设为“RibbonControlSizeLarge”。
在“Ribbon Designer”中双击Button,引入“button_Click”,加入MessageBox.Show() 3、F5编译运行吧!
如果你的人品不是特别低的话,响应Button的Messagebox已经弹出来了。 如果真是没弹出来,别着急,总共就三步重新来一次,祝你好运! 第二节、Ribbon的酒杯——IRibbonExtensibility 我们用了非常简单的方法,就创建了具有Ribbon风格的Word_Addin插件,但我们还不知道Ribbon风格界面是如何描述、如何运行的? 在工程中,右键Ribbon设计器中的Ribbon1界面,可通过"Export Ribbon to xml"菜单得到RibbonXml与Ribbon.cs文件:
- RibbonXml为定义菜单的描述文件。
- Ribbon.cs包含了处理代码。
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
Ribbon.cs文件中给我们最大的启发有两条:
- 对基类IRibbonExtensibility的引入。
- 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解决方案多用于:
- 非托管插件编写方式,禁止.Net环境在用户电脑上安装的情况下。
- 为Office2003以及更低的版本开发。
- 为MS Access创建应用。
第二、用VSTO创建的Office解决方案多用于:
- 非常直观且高效地设计Ribbon功能区和更丰富的控件集。
- 创建具有稳定安装和卸载的Addin插件。
- 提供多种编程(Template、Document、Application)模型扩展Office对象。
第三、使用ATL创建的Office解决方案多于用:
- 非BASIC解释性语言,隐藏代码实现逻辑。
- 更高的性能,非托管加载项可以获得更好的性能、更快的加载速度。
- 对消息处理的支持。
- 在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开发的朋友,愿能给您带来一点儿启迪,别无他求。
本章完! 北塔版权所有,转载请注明出处。