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;
microsoft office powerpoibt automation 二次开发的更多相关文章
- 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件
以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 2007/10/29 Mark BukovecEmpire Down Development 适用于:Mi ...
- Office(Excel、Word)二次开发——VSTO
Office(Excel.Word)二次开发——VSTO Office(Excel.Word)二次开发——VSTO Office二次开发模式: 1) VBA(visual studio for app ...
- Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库
1. Interop.Excel.dll 的查找 本文中将 Microsoft.Office.Interop.Excel.dll库简称为Interop.Excel.dll库 其实在使用Visual S ...
- 如何整合Office Web Apps至自己开发的系统(二)
WOPI项目的创建 首先用vs2012创建一个mvc4的程序.如图: 从上一篇我们可以知道,WOPI通讯主要通过两个服务: 一个是CheckFileInfo服务, 一个是GetFile服务. 所以下面 ...
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- visio二次开发——图纸解析之线段
多写博客,其实还是蛮好的习惯的,当初大学的时候导师就叫我写,但是就是懒,大学的时候,谁不是魔兽或者LOL呢,是吧,哈哈哈. 好了,接着上一篇visio二次开发——图纸解析,我继续写. 摘要: (转发请 ...
- E8.Net 工作流二次开发架构平台
一. 产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...
- SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)
SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...
- Microsoft Office Access
Microsoft Office Access各版本下载地址:http://www.accessoft.com/download.html 简介 access(微软发布的关联式数据库管理系统)一般指M ...
随机推荐
- C++ string与int的互相转换
原文地址 C++本身就提供了字符串与整型数之间的互换,那就是利用stringstream.下面是使用方法: 核心: 利用C++中的stringstream流. 由于使用过程比较简单就不再赘述,直接给出 ...
- Python安装远程调试Android需要的扩展脚本
http://android-scripting.googlecode.com/hg/python/ase/android.py 拷贝到/Python27/Lib/site-packages这个目录下 ...
- kubernetes排错系列:(一)、机房搬迁导致的节点NotReady
说下背景: 上周六机房进行搬迁,我所在的网段的机器都重启了一遍.重启之后kubernetes集群不正常.如下 排查过程: # 查看节点信息 kubectl describe nodes cbov10- ...
- EF Code First 学习笔记:约定配置 Data Annotations+Fluent API
要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...
- EMA指数平滑移动平均
英文参考:http://www.incrediblecharts.com/indicators/exponential_moving_average.php Exponential moving av ...
- java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents...
出现这个错误的原因是时区有问题,可以在mysql中执行命令: set global time_zone='+8:00'; 如上是修改为北京时间(GMT+0800). 查看修改: show variab ...
- TCP协议基础(一)
TCP为应用层提供的服务 提供进程和进程之间的通信 答: 怎么区分服务目的主机上的哪个进程呢? 通过提供端口号(well-known port), 如Telnet 23,DNS 53, HTTP 80 ...
- 继续做一道linux的企业 面试题
把/dongdaxia目录及其子目录小所有以拓展名.sh结尾的文件中包含dongdaxia的字符串全部替换为dj. 解答:这道题还是用到了三剑客里的sed: 第一步:先在/dongdaxia目录及其子 ...
- deepin系统换软件下载源&商店卡死刷新空白问题解决
deepin换源方法 1. deepin默认的软件下载源网速很慢,所以我们可以自己手动换软件下载源,方法如下: 1.1. 任意地方,右键选择在此打开终端,(快捷键:Ctrl+Alt+T),输入sudo ...
- PTA(Basic Level)1048.数字加密
本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余--这里用 J 代表 ...