VSTO踩坑记录(1)- 从零开始开发outlook插件
概述
vsto是微软提供的一种开发office插件的一种技术,现在看来有点落后了,不过项目需要的情况下,总不能跟领导说这活干不了吧?附上官方文档
安装好必备的开发环境,我用的是vs2022,在安装程序里勾选“.Net 桌面开发” 跟 “Offic开发”,然后就可以在vs里新建一个VSTO项目了。
新建项目之后,我们先创建一个“功能区”,功能区即是office界面上方的一排按钮。
右键项目 - 添加新项 - 选择功能区(可视化设计器)

从工具箱的office功能区控件拖拽一个button到group1上,目前效果如下图

现在功能区创建好了,下一步要让它显示在我们需要的位置上:
右键tab1的属性-修改OfficeId为TabMail,这个属性决定了功能区在哪个功能的地方出现,例如TabMail指的是“开始”界面的邮箱tab出现

右键ribbon1的属性 - 修改RibbonType的属性,这个属性决定了这个功能区在哪个界面出现,Microsoft.Outlook.Explorer指的是在outlook“开始”界面显示。

现在F5调试,会自动启动outlook,从上方的功能区就能看到我们刚刚创建的按钮

这里说一下这些属性的值该怎么获取
OfficeId的值:
下载官方的ID文档
解压出来会有很多outlook相关的excel文件,随意打开其中一个,筛选tak类型。
ControlName便是OfficeId需要的值,这里比较坑的一点是,需要自行查找你所需要的属性值,这些值分布在了各个文档当中,需要耐心的查找。

RibbonType的值按照字面意思可以很容易猜出来所以不再赘述。
最后新建一个winform窗体,然后给刚刚新增的button1添加一个单击事件,添加如下代码
点击查看代码
private void button1_Click(object sender, RibbonControlEventArgs e)
{
var from = new Form1();
from.ShowDialog();
}
开启调试,点击按钮就可以打开刚刚创建的窗体了。

VSTO踩坑记录(1)- 从零开始开发outlook插件的更多相关文章
- ABP框架踩坑记录
ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录
Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...
- IDFA踩坑记录
IDFA踩坑记录: 1.iOS10.0 以下,即使打开“限制广告跟踪”,依然可以读取idfa: 2.打开“限制广告跟踪”,然后再关闭“限制广告跟踪”,idfa会改变: 3.越狱机器安装开发证书打的包, ...
- manjaro xfce 18.0 踩坑记录
manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...
- 移动端Video标签踩坑记录
需求 用户能在手机上上传视频并预览. 问题 上传完成后安卓下封面展示正常,ios下封面空白.如下图所示: 利用canvas截取视频第一帧发现,ios下截取到的第一帧一直是空白图片, 安卓正常. 后端利 ...
- [技术博客]iview组件样式踩坑记录
[技术博客]iview组件样式踩坑记录 iview官方文档. 在本次项目开发中,前端项目主要使用vue框架+iview组件构建,其中iview组件在使用过程中遇到了许多官方文档中没有明确说明或是很难注 ...
- Spark Ignite踩坑记录
Ignite spark 踩坑记录 简述 ignite访问数据有两种模式: Thin Jdbc模式: Jdbc 模式和Ignite client模式: shell客户端输出问题,不能输出全列: 针对上 ...
- DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设
很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来.这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧. DevOps落地实践点滴和踩 ...
- unionId突然不能获取的踩坑记录
昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...
随机推荐
- 开源之夏 2023|欢迎报名 Apache RocketMQ 社区项目!
开源之夏是由中科院软件所"开源软件供应链点亮计划"发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬 ...
- Vulnhub 靶机 THE PLANETS: EARTH
0x01信息收集 1.1.nmap扫描 IP段扫描,确定靶机地址 平扫描 nmap 192.168.1.0/24 扫描结果(部分) Nmap scan report for earth.local ( ...
- 分支定界方法(branch and cut,branch and price的基础)
分支定界方法(branch and cut,branch and price的基础) 目录 1.基础版的分支定界算法(假设是min问题) 2.分支定界算法的步骤及其注意事项 2.1 具体的分支定界方法 ...
- Docker容器与守护进程运维 --项目四
一.Docker容器配置进阶 1.容器的自动重启 Docker提供重启策略控制容器退出时或Docker重启时是否自动启动该容器. 容器默认不支持自动重启,要使用 --restart 选项指定重启策略. ...
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
问题复现 项目上历史项目为解决漏洞扫描从Tomcat 6.0升级到了9.0版本,服务启动的日志显示如下警告,数据源是通过JNDI方式在server.xml中配置的,控制台上狂刷无法找到表空间的错误(没 ...
- games101_Homework7
实现完整的 Path Tracing 算法 需要修改这一个函数: • castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing ...
- ext 库及 pb_ds 在 OI 中的应用
ext 库在 OI 中的应用 写一个帖子,防止以后忘了. pb_ds 部分 pb_ds 万能头 #include<bits/extc++.h> 来包含 ext 库中所有的头文件(例如 pb ...
- Python:pygame游戏编程之旅六(游戏中的声音处理)
一款人性化的游戏中缺少不了声音,比如角色挂时惨叫一声,或PK时武器交锋的声音,还有就是英雄出场时的背景音乐,无不涉及到声音,本节我们就来看一下pygame中如何控制声音,下面是一个例子,但博客上传不了 ...
- 使用LOGSTASH 将数据导入到ES
logstash 执行过程 input -->filter -->output filter 可以对数据进行处理 输出插件 codec plugin 使用脚本将数据导入到ES input ...
- Winform在主窗体加载前弹出登录窗体
1:主窗体代码 点击查看代码 //实例化登录窗体 FrmLogin frmLogin = new FrmLogin(); //读取登录窗体的返回结果 DialogResult dialogResult ...