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