由于工作原因,要调研一下office PPT插件,可能接下来要做一块,先写个东西保留下。
以下部分文字内容参考了前辈博客。
参考链接:传送门
VSTO之PowerPoint(PPT)插件开发常用API汇总
开发自定义的Office插件的解决方案,总共有如下几种:
- VBA --- Visual Basic的一种宏语言
- VSTO --- VB的替代品,目前主流office插件的实现方式
- Office add-ins --- 使用主流的web技术(HTML, CSS, and JavaScript)来操作office文档
VBA是微软提出的第一种Office开发解决方案,现在落后了;后来微软发布了.net平台,并推出了新千年的新语言:C#,并适时推出了VSTO,也是一直在广泛使用的;而Office add-ins创建的插件,插件界面都是通过Http请求到服务器上获取的,如果有一些功能(例如统一字体,导出图片等)是需要离线状态也可以运行,那这个解决方案就没法满足了。
所以最后选择了VSTO。
VSTO全称Visual Studio Toolfor Office,是.net平台下的Office开发技术,是可以让我们针对现有的Office程序进行功能扩展;它就是一个创建自定义Office应用程序的Visual Studio工具包,这个工具包里面提供了很多类库来让我们调用,然后工具包中类再与Office客户端进行交互。在工作或生活中其实我们或多或少用到过VSTO插件,例如安装有道词典/WPS会在Office程序中嵌入插件程序。
开发环境:win + Visual Studio(VSTO 被内置到VS中)。
Visual Studio 已经打包了使用VSTO创建Office解决方案所需要的全部VSTO 组件。当安装Visual Studio 时,所有相关的安装,包括VSTO 的项目模板、Office开发引用和其它组件,都被安装并完全整合到新的Visual Studio 开发环境中。
开发语言:C#
详细介绍:
https://blog.csdn.net/lanwilliam/article/details/5699753
创建一个插件程序:
从图中可以看出创建的Office应用程序大致有三类:插件(Add-in),文档级别(如Excel Workbook)和模版(Template)。创建的Add-in和模版应用程序即应用程序级别的定制程序,它指的是对整个应用程序都可用。文档级别的应用程序指的是程序代码只关联到特定的文档二不是整个应用程序。咱们用插件(Add-in)即可。
调试,在项目属性页中绑定PPT程序,运行即可看到效果。
右键项目-》添加-》组件,选择功能区(可视化设计器),即给PPT添加一个TAB功能页;
选择刚才添加的功能区(可视化设计器),添加一个按钮,测试下。
比较类似于MFC.
大体上是这么做,创建新的幻灯片,添加文本框,图片等调用接口即可。
简单实现了消息对话框、自定义对话框、播放、播放中上一页、播放中下一页、新建一张幻灯片、获取当前页码。
主要代码:
上面所用代码:
private void btnMsg_Click(object sender, RibbonControlEventArgs e)
{
System.Windows.Forms.MessageBox.Show("这是按钮测试!");
}
private void btnDlg_Click(object sender, RibbonControlEventArgs e)
{
FormTest objFormTest = new FormTest();
objFormTest.Show();
}
private void btnStartPlay_Click(object sender, RibbonControlEventArgs e)
{
Microsoft.Office.Interop.PowerPoint.Slides MySlides =
Globals.ThisAddIn.Application.ActivePresentation.Slides;
Microsoft.Office.Interop.PowerPoint.Slide MySlide = null;//PPT中的幻灯片
MySlide = Globals.ThisAddIn.Application.ActiveWindow.View.Slide; //获取当前选中的幻灯片
POWERPOINT.Presentations objPresSets = null;
objPresSets = Globals.ThisAddIn.Application.Presentations;
POWERPOINT.SlideShowSettings MySSS;
MySSS = objPresSets[1].SlideShowSettings;
MySSS.StartingSlide = 1;
MySSS.EndingSlide = 3;
MySSS.Run();
System.Threading.Thread.Sleep(2000);
POWERPOINT.Presentation objPresSet = null;
objPresSet = Globals.ThisAddIn.Application.ActivePresentation;
objPresSet.SlideShowWindow.View.Next();
}
private void btnNewSlide_Click(object sender, RibbonControlEventArgs e)
{
Microsoft.Office.Interop.PowerPoint.Slides MySlides = Globals.ThisAddIn.Application.ActivePresentation.Slides;
Microsoft.Office.Interop.PowerPoint.Slide MySlide = null;//PPT中的幻灯片
MySlide = Globals.ThisAddIn.Application.ActiveWindow.View.Slide; //获取当前选中的幻灯片
MySlides.Add(MySlide.SlideIndex+1, PpSlideLayout.ppLayoutCustom);
}
private void btnGetCurPageNum_Click(object sender, RibbonControlEventArgs e)
{
Microsoft.Office.Interop.PowerPoint.Slide MySlide = null;//PPT中的幻灯片
MySlide = Globals.ThisAddIn.Application.ActiveWindow.View.Slide; //获取当前选中的幻灯片
int nNum = MySlide.SlideNumber;
System.Windows.Forms.MessageBox.Show(nNum.ToString());
}