VSTO开发Powerpoint插件

VSTO开发Powerpoint插件不怎么熟悉 VSTO 的 Powerpoint 开发 只是突然需要用一下 但是网上相关太少了 所以这里简单记录一下 VSTO VisualStudio 是 VBA 的替代 是一套用于创建自定义 Office 应用程序的 VisualStudio 工具包 VSTO 使你可以用 VisualBasic 或者 VisualC 扩展 Office 应用程序 例如 Word Excel InfoPath 和 Outlook 你可以使用强大的 VisualStudio 开发环境来创建你的定制程序 而不是使

不怎么熟悉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功能区

实现一些基础功能

引用

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("你点击了按钮"); } 

自定义对话框

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); } else Forms.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); } else Forms.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(); // 开始播放 } else Forms.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(); } else Forms.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); } else MySlides.Add(MySlides.Count + 1, PowerPoint.PpSlideLayout.ppLayoutCustom); } 

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217685.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:00
下一篇 2026年3月18日 上午9:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号