microsoft office powerpoibt automation 二次开发

背景

首先office的产品powerpoint是支持二次开发的,这里的二次开发并非指在powerpoint产品中嵌入一些本身的控件,而是一些简单的automation的控制(进入放映状态,上一页,下一页等),并不对powerpoint的产品有任何修改。microsoft官网就提供了不少关于automation的demo,这些demo均可以在 https://code.msdn.microsoft.com/site/search?query=&f%5B0%5D.Value=&f%5B0%5D.Type=SearchText&ac=4 上搜索关键字下载。c#

注册表

这里之因此提到注册表,是由于开发阶段通常都会安装多个版本的powerpoint,这些不一样版本的软件在卸载时,并不必定会清理注册表,可是咱们的程序须要根据注册表上的版本号找到对应的pia,也就是打包好的程序集,若是有未清理的注册表信息存在,就会致使代码不工做。app

powerpoint的激活向导或者保护模式

正常思路的automation应该是:打开powerpoint软件 => 打开须要自动化控制的ppt => 进入放映模式 。可是由于没有激活的powerpoint软件,或者是只读的文件,会致使自动化控制失败,绕开这一步的作法就是 直接执行最后一步 => 进入放映模式。这样能够避免前面两个操做带来的不可控性。ide

代码

Step1. 在visual studio 中新建一个基于.Net framwork的console应用。code

Step2. 添加须要的dll引用,通常都须要 "Microsoft.Office.Interop.PowerPoint.dll 14.00" 这个兼容性好一点,还有一个"office"的。这些dll均可以在office的安装目录下找到。对象

Step3: 添加具体的automation的代码事件

// 拿到app的实例,假设app都没有运行
var application = new Application()

// 这里能够直接打开powerpoint,不过咱们并不这么操做
//application.Visible = MsoTriState.msoTrue;

var pres = application.Presentations;

// 打开ppt
var file = pres.Open(@"c://aa/a.pptx", OF.MsoTriState.msoFalse, 
OF.MsoTriState.msoFalse, OF.MsoTriState.msoTrue);

// 自动进入播放状态
SlideShowSettings ss = file.SlideShowSettings;

ss.StartingSlide = 1;

ss.EndingSlide = file.Slides.Count;

ss.Run();


Thread.Sleep(500);

// 播放下一页
application.SlideShowWindows[1].View.Next();

Thread.Sleep(500);
// 推出放映
application.SlideShowWindows[1].View.Exit();

到这里位置自动化控制已经结束了,固然若是想要监听播放事件的话,能够本身添加监听。开发

获取已经运行的powerpoint实例

这里须要了解一个概念,ROT(running object table),这里主要存储的是正在运行中的对象。产品

// 拿到运行中的对象,若是ppt没有运行,则会直接报错
var pptApplication = Marshal.GetActiveObject(applicationName) as Application;

接下来就是一些常见的事件it

// 开始放映
pptApplication.SlideShowBegin += PptApplication_SlideShowBegin;
// 放映结束
pptApplication.SlideShowEnd += PptApplication_SlideShowEnd;
// 所有关闭
pptApplication.PresentationCloseFinal += 
PptApplication_PresentationCloseFinal;
相关文章
相关标签/搜索