使用VSTO编写PowerPoint插件(一)
前言
此处的“插件”,官方的翻译是“加载项”。一个是Addin, 一个是Plugin。
项目上需要实现一个Office/WPS都通用的插件,来实现业务系统与Office/WPS的联动。
那么实现Office/WPS的插件都有哪些方式呢?
Office插件的实现方式
COM
COM (Component Object Model, 组件对象模型)是微软的一套软件组件的二进制接口标准。
Office插件就是一个实现了IDTExtensibility2和IRibbonExtensibility两个接口的COM组件。IDTExtensibility2提供了Office插件接口,IRibbonExtensibility提供了Ribbon界面接口。
VSTO
VSTO (Visual Studio Tools for Office) 是指Visual Studio 为 Office开发人员提供的一系统工具。
通过VSTO, 可以方便的创建Office插件。从本质上讲, VTSO也是使用的COM。它使用 COM 包装器 (RCW) 通过托管 API 与 Office 进行通信。
Web
基于较新版本的Office, 提供了基于Web技术的Office加载项。
COM 或 VSTO 加载项是旧 Office 集成解决方案,仅在 Windows 版 Office 上运行。与 COM 加载项不同,Office 加载项不涉及在用户设备或 Office 客户端中运行的代码。对于 Office 加载项,该应用程序(例如 Excel)会读取加载项清单,并挂钩 UI 中的加载项自定义功能区按钮和菜单命令。如果需要,它加载加载项的 JavaScript 和 HTML 代码,此代码在沙盒中的浏览器上下文范围内执行。
意思是Office内嵌了一个浏览器,自定义功能区中的按钮对应一个Web页面。页面与页面之间共享上下文,且提供了Office JavaScript API用来与Office进行通信。
WPS 插件的实现方式
复用 Office的COM插件
通过注册表的配置,WPS可以直接使用Office中COM实现的插件。
包括基于COM实现的插件以及VSTO实现的插件。
Web
和Office加载项 类似, WPS也使用Web技术玩了一套插件机制。官方称为WPS加载项。
不能说大概一致,只能说一模一样。
WPS内嵌了一个Chromium 开源浏览器,自定义功能区中的按钮对应一个Web页面。页面与页面之间共享上下文,且提供了wpsjs用来与WPS进行通信。
为什么使用VSTO
- 兼容使用Office和WPS的用户
- 不直接使用COM,是因为VSTO提供了非常便捷的插件编写方式。比如提供了Ribbon的Designer工具等等。
需要注意的是,VSTO只支持C#/VB。
为什么不用VSTO
(这是后话,后面采用了C++/COM的方式编写插件。)
- VSTO依赖.NET Framework,这可能需要在目标环境上安装.NET Framework。这比较烦。
- 如果目标环境只安装了WPS,目前部署上没搞通 (可能是有办法的)
环境搭建
安装Visiual Studio 2017+ (本文均以VS2017为例)
安装时勾选 Office/SharePoint开发
为了测试需要,再安装Office/WPS
第一个插件程序
打开Visiual Studio 2017
文件 -> 新建 -> 项目,搜索“外接程序”
选择你需要的类型
确定后,会生成解决方案的初始代码。
第一个插件程序在功能区新增一个选项卡。右键工程,添加 -> 新建项。选择 “功能区(可视化设计器)”。
在
ThisAddIn.cs
中添加如下代码1
2
3
4
5protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new RibbonMain() });
}在设计器,加上我们需要的按钮或其他控件
双击设计器上的按钮,会自动生成按钮点击事件的代码,加上业务上需要的逻辑
1
2
3
4
5private void button_login_Click(object sender, RibbonControlEventArgs e)
{
Form1 dialog = new Form1();
dialog.ShowDialog();
}如果你本机有安装Microsoft PowerPoint, 直接在Visiual Studio 2017启动便可看到下面的效果