研究word插件有一段时间了,现在该是总结的时候了。

首先咱们来了解下什么是vsto?所谓vsto,就是vs面向office提供的一个开发平台。一个开发平台至少包含两个要素:开发工具(sdk)和运行环境(runtime)。那么我们先搭建开发环境,我用的是vs2010,选择的.netframework是 4.0,由于这个插件不是单独的一个解决方案,它和我们的winform客户端强耦合在一起,否则,我肯定选择至少vs2013,或者vs2015了。

打开vs后,选择office开发模板。office插件开发分为两种,一种是文档级别的开发,就是你的应用程序只是针对特定的文档进行扩展,其它的文档不受影响。另一种是外接应用程序,就是针对所有的文档起作用。我是针对所有的word文档进行插件开发。插件开发过程其实还是相当轻松的,因为微软搭建了好了框架,我们只需要专注自己的业务。

说到此处,貌似山穷水尽,没得说了。可是背后隐藏的东西实在太多,只是一言难尽,那只好娓娓道来。

正所谓,知己知彼,方能百战不殆。我们来了解下word。虽然叫相同的名字,可是各个版本差异比较大。word 2003,以简洁的界面出现在window xp上面。我自己也用了很长时间。其实随着window版本的不断发展,word也随之发展。

office 2003:office 11 :xp
office 2007:office 12 :xp
office 2010:office 14:win7
office 2013:office 15:win7,win8,win10
office 2016:  office 16(云端):  win10
 
这些组合,我觉得是很常规的组合,值得一提的是office 2013和office 2010用户数量肯定是最多的(根据统计学原理)。office 2016的各个组件,没法单独安装(其实有很复杂的解决办法,一般用户可能真没办法),只能照单全收。这些是word版本与内部代号以及操作系统的对应关系。
      站在开发的角度,word开发用的是com组件技术。而我们用.net去开发word插件,其实是开发word的一个加载项,要开发com加载项,必须实现IDTExtensibility2接口。这个接口包括5个方法。其中最重要的两个方法是OnConnection和OnStartupComplete。vsto底层封装了这些东西,暴露出来这两个事件,我们在建立插件的时候,可以去实现自己的逻辑。
 
 office加载插件的机制如下(参考msdn):

Visual Studio Tools for Office Runtime 包含一些非托管 DLL,Office 应用程序使用这些 DLL 加载运行时和 Office 解决方案。

当用户启动 VSTO 外接程序时,Office 应用程序将调入 VSTOEE.dll 以执行加载 Visual Studio Tools for Office Runtime 所需的任务。

VSTOEE.dll 将确保为解决方案和安装的 Office 版本加载 Visual Studio Tools for Office Runtime 的正确版本。 虽然可以在同一台计算机上安装多个版本的 Visual Studio Tools for Office Runtime,但是每次仅安装 VSTOEE.dll 的一个实例。 这是安装在计算机上的运行时最新版本所附带的 VSTOEE.dll。

VSTOEE.dll 加载相应版本的 Visual Studio Tools for Office Runtime 之后,VSTOLoader.dll 执行加载解决方案程序集所需进行的大部分工作。VSTOLoader.dll 执行以下操作:

  • 它为每个解决方案程序集创建一个应用程序域。

  • 它执行一组安全性检查以验证解决方案程序集是否有运行的权限。

  • 它加载解决方案所需的 Office 的 .NET Framework 扩展的版本。

VSTOLoader.dll 还执行以下特定于 VSTO 外接程序的操作:

  • 它实现 IDTExtensibility2 接口。 IDTExtensibility2 是一个 Microsoft Office 应用程序的所有 VSTO 外接程序都必须实现的 COM 接口。此接口定义应用程序为与 VSTO 外接程序通信而调用的方法。

  • 它实现 IManagedAddin 接口。 Office 应用程序使用此接口来帮助加载 VSTO 外接程序。

 
word插件与office的交互如下图所示:

注意,上图中有个主互操作程序集,也就是PIA,这个程序集随着office一起安装,也可以单独安装。它公布了com组件的内部对象,也就是word模型,供插件调用。

      

接触vsto,开发word插件的利器的更多相关文章

  1. 深入理解vsto,开发word插件的利器

    开发了vsto,客户那边也有一些反映插件安装失败或者加载不上的情况.于是我下定决定再理解下vsto的工作机制,如下图: 如上图所示,我把vsto的解决方案分为两部分,一部分是vsto Add-ins, ...

  2. Excel催化剂开源第32波-VSTO开发的插件让WPS顺利调用的方法-注册表增加注册信息

    VSTO插件开发完成后,鉴于现在WPS用户也不少,很多时候用户没办法用OFFICE软件,只能在WPS环境下办公,VSTO开发的插件,只需增加一句注册表信息,即可让WPS识别到并调用VSTO开发的功能, ...

  3. VSTO中Word的查找方式

    VSTO中Word的查找方式 前言 使用C#在VSTO开发Word插件的过程,经常需要对文档中的内容进行查找和替换.在Word中进行文本的查找替换,和一般对纯文本的查找替换却不太一样.因为Word文档 ...

  4. outlook2013插件 VSTO开发与部署

    一.背景 最近因为项目需要对outlook开发一个插件,功能是将outlook的邮件作导出功能,需要使用VSTO开发一个插件将邮件进行导出的操作.于是,开始学习VSTO outlook的开发了,折腾了 ...

  5. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂安装过程详解及安装失败解决方法

    因Excel催化剂用了VSTO的开发技术,并且为了最好的用户体验,用了Clickonce的布署方式(无需人工干预自动更新,让用户使用如浏览器访问网站一般,永远是最新的内容和功能).对安装过程有一定的难 ...

  6. vsto下开发wps插件

    我们要开发wps插件了.之前用vsto开发过word插件,我也讲过c#下如何开发wps插件(有点繁琐).如果采用c#从头再开发wps插件,那么开发出来的office加载项就会出现两个.我们要实现的wp ...

  7. JS前端图形化插件之利器Gojs组件(php中文网)

    JS前端图形化插件之利器Gojs组件(php中文网) 一.总结 一句话总结:php中文网我可以好好走一波 二.JS前端图形化插件之利器Gojs组件 参考: JS前端图形化插件之利器Gojs组件-js教 ...

  8. 教你开发jQuery插件(转)

    教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...

  9. 开发JQuery插件(转)

    教你开发jQuery插件(转)   阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...

随机推荐

  1. docker swarm集群搭建

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: swarm是docker原生的集群管理软件,与kuberne ...

  2. Python 中的闭包

    通常来说,函数中的局部变量在函数调用结束的时候不能再被引用,所分配的空间也会被回收. 但是通过闭包这种技术,函数调用结束了,它的局部变量的值还可以保存在闭包里. 试举一例: def make_adde ...

  3. linux 中 svn 服务器搭建 重启

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  4. 验证SQLServer死锁进程

    SELECT '现在没有阻塞和死锁信息' AS message -- 循环开始WHILE @intCounter <= @intCountProperties BEGIN-- 取第一条记录 SE ...

  5. SQLite常用函数及语句

    SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...

  6. easywechat--在thinkPHP5中的使用

    1. 安装 1.1 v-4.0 版本要求 PHP版本在7.0以上 1.2 在项目目录下运行以下命令 若未安装composer,则先安装composer -> http://docs.phpcom ...

  7. linux 云计算Openstack搭建

    Openstack 由NASA和Reckspace合作研发并发起的项目,以Apache许可证为授权 云计算三大支柱模型 IaaS:基础架构即服务 提供服务器/虚拟主机/网络等设备资源 PaaS:平台即 ...

  8. linux dns子域授权 split分离解析 缓存dns服务器

    DNS子域授权作用:适用于同一个DNS组织父/子域名的解析工作由不同的dns服务器负责父dns服务器应该有为子域名迭代的能力 上下级区域属于不同的机构管理:.cn与.Anonymous.cn.cn需要 ...

  9. java I/O框架 (四)文件流

    文件读取 FileInputStream FileReader 文件写入 FileOutputStream FileWriter 随机文件读写 RandomAccessFile 一.文件读取 File ...

  10. AndroidDevTools

    收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具. ...