创建VSTO解决方案
使用VBA创建Office定制与使用VSTO创建Office解决方案有一些类似,但有许多的不同。
使用VBA创建Office解决方案
当创建VBA解决方案时,在Office应用程序中开始。在Word和Excel中,可以按Alt+F11打开VBE编辑器。使用VBE,可以访问当前打开的任何文档项目,基于该文档的模板,以及任何全局可访问的模板,或者附属的或全局的可用模板,例如Normal.dot。
当添加代码到ThisDocument或ThisWorkbook中,或者添加代码到该文档项目中的新模块中,该代码将仅对已添加该代码的文档或工作簿中可用。如果添加该代码到一个模板中,那么代码将对使用该应用程序打开的任何基于该模板的文档或者全局模板都是可用的。
可以从Outlook中访问VBE,但是Outlook每次仅支持一个VBA项目。特别地,开发者使用IDTExtensibility2接口为Outlook创建组件对象模型(COM)加载项。
使用VSTO创建Office解决方案
当创建一个VSTO解决方案时,将在Visual Studio IDE中开始。这里,可以选择为Word或Excel来创建文档或模板解决方案,或者为Outlook的加载项解决方案。如果创建Outlook加载项,那么将对整个Outlook应用程序都可用。如果选择Word或Excel文档,则该代码仅对那个文档有用。如果选择Word或Excel模板,则代码对任何从该模板中创建的文档都是可用的。
当使用VSTO来创建Word或Excel定制时,可以从Visual Studio里完全访问Word或Excel应用程序和对象模型。当创建加载项时,可以通过Application对象访问应用程序中的所有对象,但是没有从Visual Studio里直接访问该应用程序。
为VSTO文档级的解决方案编写的代码被存储在与该文档相联系的文件中,这经常被称作为“代码后面的”文件,因为代码在后台以集的形式支持该文档功能,而不是像VBA代码一样内嵌于文档。当代码文件被编译成集(DLL)时,接着与该文档相联系。所编译的代码可以仅在文档级被访问(而不是应用程序级)。
也可以基于Excel模板或Word模板创建VSTO解决方案。在此情形下,无论何时基于该模板打开一个文档,VSTO定制代码都将运行。不能够使用VSTO为Word 2003和Excel 2003创建应用程序级的定制,然而可以使用VSTO 2005 SE为几个Office应用程序(包括号Word 2003和Excel 2003)创建应用程序级的加载项。
以加载项的形式创建VSTO和VSTO 2005 SE的应用程序级的解决方案,无论何时开启应用程序时都将装载该加载项,而在关闭该应用程序时则会卸载该加载项。可以创建加载项来定制应用程序的用户界面,例如在Excel 2003中添加新的菜单或菜单项,在Word 2007中添加按钮到功能区,或者当一个应用程序事件发生时执行特定的操作。
使用VBA,在Word中通过添加代码到全局模板中创建应用程序级的定制,可能是Normal.dot模板或通过存储模板在Startup目录中使自定义模板成为全局模板。这种方案在VSTO中不被支持,因为VSTO创建定制仅特定于单个的文档,而不是在Word中打开的每个文档。如果使用Word模板创建VSTO定制,然后将其存储在Startup目录中,与该模板相关的定制的代码对所有打开的文档都不可用,它仅在基于该模板的文档被打开时运行。如果想为Word创建应用程序级的定制,应该使用VSTO 2005 SE创建加载项。
当使用VBA定制Excel时,可以使用Excel加载项文件(.xla文件)创建应用程序级加载项类型。然而,不能使用一个已存在的.xla文件创建VSTO解决方案,因为在项目创建中不支持该文件类型。虽然可以创建一个Excel VSTO解决方案,然后保存该文件为.xla文件运行定制代码,但这种方案不被Microsoft所支持。
项目类型
当打开Visual Studio 2005并创建一个新项目时,将发现很多与Office相关的模板可用。这些项目出现在新建项目对话框中,并取决于安装Visual Studio时所选择的环境设置。
使用VSTO的默认安装,可以创建Word文档、Word模板、Excel工作簿、Excel模板或Outlook加载项项目。可以选择地安装InfoPath工具集,使得InfoPath模板可用,如下图所示。要查看这些项目模板,在菜单“文件”中,单击“新建项目”。可以扩展Visual Basic节点来展示项目模板类别。要在新建项目对话框的模板窗格中显示VSTO项目模板,单击Office节点。

图1:新建项目对话框中的VSTO模板
如果在VSTO之上已安装了VSTO 2005 SE,在新建项目对话框中有一些其它模板可用,如图2所示。

图2:在新建项目对话框中的VSTO 2005 SE模板
注意,在2007外接程序节点中有一些为Office 2007的加载项模板,同样,在2003外接程序节点中有一些为Office 2003的项目模板。
Excel工作簿
Excel工作簿项目模板能够使您为Excel工作簿(.xls文件)创建VSTO定制。当在新建项目对话框中选择Excel工作簿并单击确定后,Visual Studio 2005呈现VSTO项目向导。使用该向导,可以选择自定义新工作簿、或者可以选择已存在的工作簿,如图3所示。

图3:VSTO项目向导
要选择一个已存在的文档,单击“浏览”并导航到想要创建的工作簿。不会使用所选择的工作簿,VSTO产生一个副本,并将其保存在存储VSTO解决方案的同一文件夹中。
Excel模板
Excel模板项目能使您为Excel模板(.xlt文件)创建VSTO定制。当选择Excel模板时,可以创建一个新模板或者选择现有的模板。要选择现有的模板,必须选择一个.xlt扩展名的文件。如果想要创建一个基于现有工作簿的模板,在向导里选择该工作簿之前,在Visual Studio外将该工作簿保存为模板。VSTO将复制该模板到保存VSTO解决方案的相同目录中。
Word文档
Word文档项目模板使得可以为Word文档(.doc文件)创建一个VSTO定制。当在新建项目对话框中选择Word文档并单击确定时,Visual Studio显示VSTO项目向导。在该向导中,创建一个新文档或者选择现有的。VSTO产生所选文档的副本,将在存储VSTO解决方案的同一目录中保存该文档副本。
Word模板
Word模板项目能够使您为Word模板(.dot文件)创建一个VSTO定制。当选择Word模板时,可以创建一个新模板或选择现有的。要选择现有的模板,应选择扩展名为.dot的文件。在基于现有文档创建模板,必须在向导中选择该文档之前首先在Visual Studio之外将该文档保存为一个模板。VSTO将复制该模板到存储VSTO解决方案的同一目录中。
Outlook加载项
在Outlook加载项模板中,可以使用VSTO为Outlook创建加载项。当选择Outlook加载项时,Visual Studio在代码视图中打开该加载项项目,显示ThisApplication_Startup和ThisApplication_Shutdown事件句柄。VSTO也为Outlook解决方案创建一个安装项。该安装项被使用来注册和发布Outlook加载项。
VSTO 2005 SE加载项
如果已经安装了VSTO 2005 SE,您将发现创建几种Office 2003和Office 2007应用程序的额外的项目模板,包括Word、Excel、Outlook、PowerPoint、Visio和InfoPath(仅2003)。这些加载项的架构与VSTO Outlook加载项稍有不同。当创建VSTO 2005 SE加载项时,Visual Studio在代码视图中打开该加载项,显示ThisAddin_Startup和ThisAddin_Shutdown事件句柄。
注:本文整理自《VSTO for Mere Mortals》─—A VBA Developer’s Guide to Microsoft Office Development Using Visual Studio 2005 Tools for Office,有删节。

发表评论