VSTO开发概述
刘永富
本文向读者介绍使用Visual Studio编程工具开发Office插件的基础入门知识.
VSTO是Visual Studio Tools for Office的简称,Visual Studio是微软开发的最为成熟的编程套件,包含C#,VB.Net等多种语言,由于VS功能的强大和方便,而且微软不断对其进行版本更新,所以使用VS开发Office是必然的趋势.
第一部分:VSTO开发环境配置
这部分谈谈要进行VSTO开发,需要具备哪些条件.从大的方面讲,需要 开发人员 + 操作系统 + Office + Visual Studio,这四个方面.
也就是说,需要会编程的人,需要在合适的操作系统安装Office以及Visual Studio.
1.1 对开发人员的要求
进行VSTO开发,要具有编程的基础,对Office操作比较熟练,最好是有VBA编程的基础.
1.2 操作系统的选择
Windows XP或者Win7(32bit)都可以进行VSTO开发.
1.3 Office的安装
Office常用版本有2003 2007 2010 2013等,具体安装哪一个版本,根据开发人员或者用户需求而定,这里强调一点,2003版和以后的高级版本,最大的不同是:高级版本的界面是功能区形式的,而不是传统的工具栏形式,因此对于VSTO开发也要注意这一点区别.
1.4 Visual Studio的安装
Visual Studio常用版本有VS2005 2008 2010 2013 2015等,如果要进行VSTO开发,在安装VS的过程中,注意勾选"安装VSTO"这一项,即可.如果不勾选,那么你只能使用VS进行常规的窗体开发或者类库开发,这和Office就没关系了.
那么具体Visual Studio安装哪一个版本比较恰当呢,这点和操作系统以及Office版本有很大关系,如果你的操作系统是XP,那么VS只能安装2010及其以下版本,而VS2012及其以上需要安装在Win7上面.
另外一点,你还要明确地知道,你要为哪一个版本的Office进行开发,一般来说,Office版本越高,要求的VS版本也越高,大家看看下面的图示就明白了.
从上图可以看出,如果你要为Office2003开发,使用VS2005/2008比较恰当,如果为Office2010开发,使用VS2010/2012比较恰当.
在这里,我给出两套最优的开发组合方案:
(一) XP或win7 + Office 2003 +VS 2008,这个方案面向传统用户.
(二) XP + Office 2010 + VS 2010,这个方案面向习惯于Office高级版本的用户.
或者 Win7 + Office 2010 + VS 2012.
1.5 开发语言设置
VSTO的开发有两种语言可选 Visual C# 或 Visual Basic,在VS安装的过程中,可以选择安装.同时在创建VSTO项目的时候,也可以针对语言进行选择.
如上面图示,采用了VS2008创建新的VSTO项目,使用的语言是Visual C#,Office版本是2003
第二部分:VSTO开发类型
大体上分,VSTO可以开发Office外接程序(加载项),以及文档级开发.
2.1 Office外接程序
顾名思义,外接程序是面向Office应用程序级别的一个COM加载项,他的作用范围是应用程序,而不是某个文档.我们知道任何程序都有一个入口点,比如我们进行Windows窗体开发,一般程序是从Form的Load事件进去,从而装载其他部分,如果没有窗体,一般是从Main函数开始运行.
而对于VSTO外接程序,他的入口函数是 ThisAddin_Startup,这个函数是一个事件过程,也就是说,当在Office中加载这个COM的时候,首先运行这个函数.当编译成功后,会在项目文件夹的Debug文件夹生成相应的dll文件,和一些其他相关文件,这些文件就是VSTO的最终作品了.
2.2 Office文档级开发
接下来说说文档级的开发,这种开发是面向单一文档的,比如我们创建项目的时候,选择的是Excel workbook,那么你所做的一切,都是围绕这个工作簿进行的,和其他文档没任何关系.最后生成的作品,是这个工作簿以及和他相关的dll文件.
至于说在VSTO中要对Office进行哪些操作,这就和具体需求有关了,具体说用Visual C#或VB.Net如何书写这些代码,这就需要大家学习C#语法知识,以及学习如何使用C#操作和控制Office组件这方面的知识了.如果有VBA的经验,学习这方面也不太难.
另外,VSTO项目和常规的C#窗体应用程序或控制台程序,最大的区别是,项目创建的时候,自动添加VSTO所需的外部引用.
第三部分:VSTO界面开发介绍
其实,最简单的VSTO程序,就是手工创建一个Excel外接程序项目之后,在自动生成的ThisAddin_Startup事件过程中写入:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MessageBox.Show("VSTO,我来了");
}
其他事情什么都别做了.直接按下F5测试,这就是一个完整的VSTO程序.
实际上,VSTO还可以为Office进行界面的设计,从大的类别看有以下几种:
3.1 修改Office的工具栏
这一点设计是面向Office2003版的,一般在VSTO的启动事件过程中,对Commandbars对象进行操作即可,这和VBA非常类似.
3.2 功能区定制
这一设计是面向Office2007以上版本的,可以在VSTO中自定义功能区的XML,当用户点击功能区中的按钮后,会响应VSTO中的相关过程函数.这一部分的开发,需要掌握CustomUI的知识.
3.3 为Office增加任务窗格
VSTO开发很重要的一个理念就是把C#的窗体和控件能够用在Office中,当然,大家有了上面所讲的知识,就很轻松地做到当VSTO加载项加载的时候,在Office中呈现出一个C#的Form,方法很简单,就是在项目中添加一个窗体,然后在在加载项的启动事件中Show一下这个窗体即可.遗憾的是这种窗体和Excel看上去不是一体的,用起来不美观也不方便.为此,我们可以往Office中引入任务窗格(Custom Task Pane,即CTP)这一对象.开发人员可以加入一些用户控件(UserControl),使其呈现在Office界面中.
3.4 文档操作窗格
如果要为某一文档自定义窗格,必须创建文档类型的VSTO项目,而不是加载项.但是这种窗格不叫做任务窗格,而叫文档操作窗格(ActionsPane).这种对象的Parent是ThisWorkbook或ThisDocument,而不是ThisAddin.
第四部分:其他相关主题
4.1 使用C#开发Excel自定义函数(UDF)
4.2 VSTO中如何处理应用程序或文档的事件
4.3 C#窗体与控件的使用技巧
4.4 C#项目引用的管理,外部对象的使用
......更多内容请大家关注我的课程,我们的VSTO开发群是ryueifu_VBA:61840693.