不怎么熟悉VSTO的Powerpoint开发,只是突然需要用一下,但是网上相关太少了,所以这里简单记录一下。


VSTO(Visual Studio Tools for Office )是VBA的替代,是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO使你可以用Visual Basic 或者Visual C#扩展Office应用程序(例如Word、Excel、InfoPath和Outlook)。你可以使用强大的Visual Studio开发环境来创建你的定制程序,而不是使用Visual Basic for Application(VBA)和Office里的Visual Basic Editor(VBE)。无论你是创建简单的数据录入应用程序还是复杂的企业解决方案,VSTO都使之变得容易。

开发自定义的Office插件的解决方案,总共有如下三种:

  • VBA — Visual Basic的一种宏语言
  • VSTO — VB的替代品,目前主流office插件的实现方式
  • Office add-ins — 使用主流的web技术(HTML, CSS, and JavaScript)来操作office文档

VBA是微软提出的第一种Office开发解决方案,太老了,落后了;后来微软发布了.net平台,并推出了新语言:C#,并适时推出了VSTO,也是一直在广泛使用的Office开发套件;而Office add-ins创建的插件,插件界面都是通过Http请求到服务器上获取的(Web技术实现),不能实现一些离线功能。

文章目录

  • 创建VSTO外接程序(插件)
    • 开发环境
    • 创建第一个VSTO外接程序及其Tab功能区
    • 实现一些基础功能
      • 引用
      • 默认对话框
      • 自定义对话框
      • 幻灯片切换
      • 幻灯片放映
      • 新建和删除
    • 参考

创建VSTO外接程序(插件)

开发环境

Windows 10 以及Visual Studio 2019。VS内已经有VSTO的相关开发组件,进入VS Installer里可以添加和查看。

创建第一个VSTO外接程序及其Tab功能区

新建项目,模板为PowerPoint VSTO外接程序。

框架就选择最新的.NET 框架,我这里用的 4.7.2。
创建完毕后,可以直接点运行,它会自启动Office,可以看到加载项里会有该项目。

这个时候进PPT是什么都没有的,因为还没有添加TAB功能页。
当然,没有功能页,也是可以开发的,自动生成的代码里,就给你表明了加载项启动和结束的生命周期函数。

为了更容易理解,这里我们需要添加一个TAB功能区。项目-》添加组件-》功能区

我们可以看到功能区的样子。

当然在启动看看之前,看一下tab的属性,将Controlld属性改成Custom,才能修改Tab名,进行自定义。

名字改成了Test,添加了一个Button,运行可以看到下图。

实现一些基础功能

我实现了一些基础功能,因为没有找到VSTO的细节文档,经过摸索我发现,VSTO的对象命名和类结构和VBA相差不大,所以参考文档为微软PowerPointVBA参考文档。以下不熟悉的对象,可以在该参考文档内搜索。

双击按钮可以自动创建响应事件,所以这里我只贴功能实现代码。

引用

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
using Forms = System.Windows.Forms;
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{app = Globals.ThisAddIn.Application;
}

默认对话框

这里直接用的系统的模式对话框,具体参数百度。

private void Button_clicktest_Click(object sender, RibbonControlEventArgs e)
{Forms.MessageBox.Show("你点击了按钮");
}

自定义对话框

同Tab功能区创建过程一致,添加一个 Windows 窗体(Windows.Forms)。

窗体类名为 Form1

按钮触发对话框:

private void button_clickedit_Click(object sender, RibbonControlEventArgs e)
{Form1 objForm = new Form1();objForm.Show();
}

具体参数及其函数可以参考类Windows.Forms的说明,我指出了类名就可以自行查找具体用法。

幻灯片切换

我发现每次切换都需要选中幻灯片,但是如何获取当前正在显示的幻灯片我还没有摸索到。

// 上一张幻灯片
private void button_pre_Click(object sender, RibbonControlEventArgs e)
{if (app.ActiveWindow.Selection.Type != PowerPoint.PpSelectionType.ppSelectionNone){PowerPoint.Slide MySlide = app.ActiveWindow.View.Slide;  //获取当前选中的幻灯片var index = MySlide.SlideIndex;if (index > 1)app.ActiveWindow.View.GotoSlide(index - 1);}elseForms.MessageBox.Show("未选中幻灯片");
}
// 下一张幻灯片
private void button_next_Click(object sender, RibbonControlEventArgs e)
{if (app.ActiveWindow.Selection.Type != PowerPoint.PpSelectionType.ppSelectionNone){PowerPoint.Slide MySlide = app.ActiveWindow.View.Slide;  //获取当前选中的幻灯片PowerPoint.Slides AllSlide = app.ActiveWindow.Presentation.Slides;  //获取当前所有幻灯片var index = MySlide.SlideIndex;if (index < AllSlide.Count)app.ActiveWindow.View.GotoSlide(index + 1);}elseForms.MessageBox.Show("未选中幻灯片");
}

幻灯片放映

从当前还是从头只是调节播放参数,主要是PowerPoint.SlideShowSettings类的设置,注意EndingSlide 不能小于StartingSlide,不然会无响应 。

private void button_start_Click(object sender, RibbonControlEventArgs e)
{PowerPoint.Slides AllSlide = app.ActiveWindow.Presentation.Slides;  //获取当前所有幻灯片PowerPoint.Presentations objPresSets = null;objPresSets = app.Presentations;PowerPoint.SlideShowSettings MySSS;MySSS = objPresSets[1].SlideShowSettings;MySSS.StartingSlide = 1;MySSS.EndingSlide = AllSlide.Count;MySSS.Run();// 开始播放
}private void button_startnow_Click(object sender, RibbonControlEventArgs e)
{if (app.ActiveWindow.Selection.Type != PowerPoint.PpSelectionType.ppSelectionNone){PowerPoint.Slide MySlide = app.ActiveWindow.View.Slide;  //获取当前选中的幻灯片PowerPoint.Slides AllSlide = app.ActiveWindow.Presentation.Slides;  //获取当前所有幻灯片PowerPoint.Presentations objPresSets = null;objPresSets = app.Presentations;PowerPoint.SlideShowSettings MySSS;MySSS = objPresSets[1].SlideShowSettings;MySSS.StartingSlide = MySlide.SlideIndex;//起始页MySSS.EndingSlide = AllSlide.Count;// 结束页MySSS.RangeType = PowerPoint.PpSlideShowRangeType.ppShowSlideRange;MySSS.Run();// 开始播放}elseForms.MessageBox.Show("未选中幻灯片");
}

新建和删除

新建和删除就是对 PowerPoint.Slide 和 PowerPoint.Slides 的操作。

private void button_deleteslide_Click(object sender, RibbonControlEventArgs e)
{PowerPoint.Slides MySlides = app.ActivePresentation.Slides;PowerPoint.Slide MySlide = null;//幻灯片对象 if (app.ActiveWindow.Selection.Type != PowerPoint.PpSelectionType.ppSelectionNone){MySlide = app.ActiveWindow.View.Slide;  //获取当前选中的幻灯片MySlide.Delete();}elseForms.MessageBox.Show("未选中幻灯片");
}private void button_newslide_Click(object sender, RibbonControlEventArgs e)
{PowerPoint.Slides MySlides = app.ActivePresentation.Slides;PowerPoint.Slide MySlide = null;//幻灯片对象 if (app.ActiveWindow.Selection.Type != PowerPoint.PpSelectionType.ppSelectionNone){MySlide = app.ActiveWindow.View.Slide;  //获取当前选中的幻灯片MySlides.Add(MySlide.SlideIndex + 1, PowerPoint.PpSlideLayout.ppLayoutCustom);}elseMySlides.Add(MySlides.Count + 1, PowerPoint.PpSlideLayout.ppLayoutCustom);
}

参考

微软VBA PowerPoint 参考文档
博客 https://blog.csdn.net/m0_37684310/article/details/104518584

VSTO开发Powerpoint插件相关推荐

  1. VSTO开发PPT插件将PPT导出成图片

    编辑器Visual Studio 2022 官网下载地址 https://visualstudio.microsoft.com/zh-hans/ 安装参考 VSTO开发Powerpoint插件 htt ...

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

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

  3. PPT插件(VSTO)开发入门

    VSTO(Visual Studio Tools for Office)是用于开发Office插件的工具,由微软官方提供.我了解到VSTO是在2014年年底的时候,当时在儒道佛(公众号:寒树Offic ...

  4. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码...

    根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下 ...

  5. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第13波-一键生成带图片自由报表...

    在Excel的世界中,因着Excel的灵活性,觉得广大用户喜欢(一般的系统都是中规中矩,用户没法对它进行半点改变),例如可以用来做简历模板.员工信息标签.员工工资条.任意的多行多列合并单元格形成自己最 ...

  6. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第10波-快速排列工作表图形对象...

    在Excel里插入图片,和对图形(图表.切片器.图片.形状.SmartArt等)进行排版,这些在日常工作中都少不了的,如果对这些操作只是偶尔几张图片.几个图形,手工弄一下,倒也可接受,但一旦要处理的数 ...

  7. vsto下开发wps插件

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

  8. 接触vsto,开发word插件的利器

    研究word插件有一段时间了,现在该是总结的时候了. 首先咱们来了解下什么是vsto?所谓vsto,就是vs面向office提供的一个开发平台.一个开发平台至少包含两个要素:开发工具(sdk)和运行环 ...

  9. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第11波-快速批量插入图片...

    Excel自带插入图片功能,但操作步骤繁琐,插入图片后,还要一张张图片归位,插入的图片一般是用于可视化某些商品条码,增强阅读性.即一般会在商品条码旁边存放对应的图片,这些工作若用Excel自带的功能, ...

  10. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第9波-数据透视表自动设置...

    对于数据分析工作者和深度Excel用户来说,数据透视表的使用频率之高是毋庸置疑的.透视表可谓投入少产出大,给它数据源,最终就可以轻松地得到想要的数据汇总.报表.结合数据透视图.条件格式等可视化方式,快 ...

最新文章

  1. 黑客这样使用python发邮件
  2. 在 OS X 中使用 OpenResty
  3. 带收缩因子的PSO优化算法
  4. 停车管理系统汽车到达汽车离去c语言,停车场管理系统 C语言实现
  5. python疑问5:位置参数,默认参数,可变参数,关键字参数,命名关键字参数区别...
  6. 更新fielddata为true_线程与更新UI,细谈原理
  7. java独步寻花,小班语言《江畔独步寻花》
  8. 工作总结9:vue处理token
  9. 《大型网站技术架构》读书笔记[3] - 架构核心五要素
  10. js中改变this的指向,有apply、call和bind这三种方法
  11. 服务器不稳定是什么意思
  12. 复杂网络——活跃度驱动模型(activity-driven model)原理及算法实现
  13. 【NOIP2016】魔法阵(节选自冬雪_狂舞_桀骜-xmy的博客)
  14. adb shell循环命令_android adb实用命令小结
  15. Spark处理数据倾斜问题
  16. 无线蓝牙耳机那个品牌比较好?试试这五款比较实用的吧
  17. 中学-综合素质【8】
  18. 杨百万:这么多年不倒 重要的是信奉落袋为安
  19. 深度学习调参:优化算法,优化器optimizer,学习率learning rate
  20. Python_哔哩哔哩弹幕可视化

热门文章

  1. 费曼:“只要我不能创造的,我就还不理解”
  2. 3ds Max2021安装步骤详解
  3. bp神经网络模型的优缺点,什么是BP神经网络模型?
  4. 湖南省益阳市谷歌高清卫星地图下载(百度网盘离线包下载)
  5. 中班音乐会跳舞的机器人_中班音乐律动机器人
  6. Linux下安装配置JDK6
  7. 【网络安全】单选/多选/判断/填空题
  8. 如何让Low Poly好看
  9. 数据分析项目整理之用户消费行为分析
  10. 代码不止|想制胜海外市场?Google 来帮你!