Excel插件开发过渡到VB.net中的VSTO

Com DLL基础知识

 Com本质就是一个动态链接库,在windows中是靠DLL来实现的。这个DLL实现了IUnknown接口等,同时实现了 DllRegisterServer、 DllRegisterServer、 DllCanUnloadNow 、DllGetClassObject等函数。计算机为每个DLL分配一个GUI识别码,然后利用DllRegisterServer函数将Dll信息写入注册表,利用DllUnregisterServer来卸载DLL。在C、 C++中要实现一个COM组件步骤是非常繁琐,必须导出DllRegisterServer、 DllRegisterServer、 DllCanUnloadNow 、DllGetClassObject这几个函数。

Office 中的Com DLL

 每个Com DLL必须提供上面所述的几个导出函数外,要成为Office扩展插件中的DLL必须实现IDTExtensibility2接口。要提供Ribbon选项卡则必须实现IRibbonExtensibility接口。
在这里插入图片描述
Com DLL要成为Office插件则必须实现上图中提供的IDTExtensibility2的接口。
在这里插入图片描述
 该接口提供上面两个函数,可以在Com DLL中获取Office中运行的实例和在卸载是进行资源的清理操作。下面用Excel进行举例说明。
 要在Office中提供选项卡即Ribbon界面则必须实现Office中的IRibbonExtensibility接口。
在这里插入图片描述
在这里插入图片描述
 通过该接口实现Ribbon选项界面的设计。

VB 6.0 Excel Com DLL

 启动VB6.0 并选择Addin项目,双击Conect设计器,按照下图设置该界面并情况里面的代码保存,器设计器已经实现IDTExtensibility2接口了。到保存的目录下用记事本打开Connect.Dsr文件,其中本质包含在里面。
在这里插入图片描述
在这里插入图片描述
 该文件里保存了为DllRegisterServer和DllRegisterServer函数提供注册要修改的内容。VB6.0中的DLL自动实现了C、C++中需要导出的4个函数。按照上面步骤实现接口即可以实现Excel的外接程序。

VB6.0 的遗憾

 VB 6.0微软已经不再更新,且只能为32位Office程序编写Com加载项且现在兼容性非常差,其解决方案则升级到.net平台。微软提供了VSTO专门为Office外接程序留的模板。

VB.net 中VSTO模板

在这里插入图片描述
 建议安装2017以上VS并安装Visual Basic语言和VSTO模板,其语法规则和VB6.0一样,只是编程思路有变化。在VB.net中开发的DLL加载项可以兼容Office 32和64位版本的,其兼容性非常好。建立好项目以后如图:
在这里插入图片描述
 VB.net 的代码封装地方在类模块或者标准模块和VB6.0差不多但是在.net中,处处是对象,这思想转换需要时间适应。在VB.net的VSTO中微软已经实现Com DLL的基础构架,我们唯一要做的就是实现自己的业务需求,其生成的DLL需要依赖如图运行环境。
在这里插入图片描述
 在Office 2010中没有自动安装Office Runtime环境,第一次部署需要手动安装该环境,后面在安装插件则不需要,第一次安装还需要安装.net Framworker环境。
 在VB.net封装的Excel插件,其dll加载时获取Excel实例该实例封装在如图所示中:在该项目建立一个标准模块并声明Excel实例:
在这里插入图片描述

在这里插入图片描述
 在DLL被加载到Excel进程的时候,获取Excel实例方法如图所示:
在这里插入图片描述
 任选一种方法都可以获取正在运行的Excel实例。
 上面就是Office插件基本架构,在该架构上,很容易实现功能扩展。如果有兴趣加群:794568082互相交流。

猜你喜欢

转载自blog.csdn.net/qq_25686631/article/details/112007447