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;
相關文章
相關標籤/搜索