zoukankan      html  css  js  c++  java
  • microsoft office powerpoibt automation 二次开发

    背景

    首先office的产品powerpoint是支持二次开发的,这里的二次开发并不是指在powerpoint产品中嵌入一些自己的控件,而是一些简单的automation的控制(进入放映状态,上一页,下一页等),并不对powerpoint的产品有任何修改。microsoft官网就提供了很多关于automation的demo,这些demo都可以在 https://code.msdn.microsoft.com/site/search?query=&f[0].Value=&f[0].Type=SearchText&ac=4 上搜索关键字下载。
    官方文档 https://msdn.microsoft.com/en-us/library/office/ff746846(v=office.14).aspx

    注册表

    这里之所以提到注册表,是因为开发阶段一般都会安装多个版本的powerpoint,这些不同版本的软件在卸载时,并不一定会清理注册表,但是我们的程序需要根据注册表上的版本号找到对应的pia,也就是打包好的程序集,如果有未清理的注册表信息存在,就会导致代码不工作。

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

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

    代码

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

    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;
    
    

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

     // 开始放映
    pptApplication.SlideShowBegin += PptApplication_SlideShowBegin;
    // 放映结束
    pptApplication.SlideShowEnd += PptApplication_SlideShowEnd;
    // 全部关闭
    pptApplication.PresentationCloseFinal += 
    PptApplication_PresentationCloseFinal;
    
    
    
  • 相关阅读:
    线程&进程
    C#入门基础
    .Net GC垃圾收集机制(下)
    .Net GC垃圾收集机制(上)
    GAC的理解及其作用
    C# DES加密,KEY和IV不同设置的写法
    常见加密算法简析
    密码学
    数字签名是什么?(数字证书)
    加密算法和MD5等散列算法的区别
  • 原文地址:https://www.cnblogs.com/Sir-Lin/p/11869043.html
Copyright © 2011-2022 走看看