C#實(shí)現(xiàn)操作PPT動(dòng)畫(huà)窗格并插入音頻文件
系統(tǒng)環(huán)境
在 Windows Server 2019 操作系統(tǒng)上安裝Office PowerPoint 2016或以上
安裝 .netFramework4.7.1以上
開(kāi)發(fā)工具 VS2019 語(yǔ)言 C#
基礎(chǔ)配置
打開(kāi)控制面板、管理工具、組件服務(wù):
點(diǎn)擊組件服務(wù)、計(jì)算機(jī)、我的電腦、DCOM配置
找到Microsoft PowerPoint應(yīng)用程序
選擇屬性、打開(kāi)標(biāo)識(shí)選項(xiàng)卡、選擇下列用戶選項(xiàng),設(shè)置啟動(dòng)PPT應(yīng)用的用戶,點(diǎn)確定即可。
設(shè)計(jì)想法
由用戶設(shè)計(jì)PPT及每頁(yè)的動(dòng)畫(huà)效果,并以此為模板,與給定的一組音頻文件,通過(guò)程序控制進(jìn)行二次合成,插入的依據(jù)則是根據(jù)提供的動(dòng)畫(huà)標(biāo)題進(jìn)行搜索定位(標(biāo)題可以模糊搜索)。這個(gè)設(shè)計(jì)想法可以參考文末補(bǔ)充內(nèi)容
我們假設(shè)如下圖,要在兩組動(dòng)畫(huà)效果中,執(zhí)行完成一個(gè)動(dòng)畫(huà)效果后插入一段音頻講解詞,動(dòng)畫(huà)效果的標(biāo)題為:
(1)組合6:對(duì)應(yīng)插入P5_01.MP3講解詞。
(1)組合30:對(duì)應(yīng)插入P5_02.MP3講解詞。
那么設(shè)計(jì)原理,就是遍歷動(dòng)畫(huà)窗格的動(dòng)畫(huà)效果對(duì)象,記錄對(duì)象的持續(xù)時(shí)間和延遲時(shí)間,插入音頻后,則下一個(gè)動(dòng)畫(huà)效果的延遲時(shí)間根據(jù)上一動(dòng)畫(huà)效果對(duì)象的時(shí)間和音頻的時(shí)間累積進(jìn)行計(jì)算,并更改動(dòng)畫(huà)效果的開(kāi)始條件,如下圖:
如圖,下一個(gè)動(dòng)畫(huà)效果對(duì)象的延遲時(shí)間重新計(jì)算,是根據(jù)“組合6" 和 "P5_01" 的時(shí)間進(jìn)行累積計(jì)算得到的,以此類推。
關(guān)鍵代碼
組件庫(kù)引入
基礎(chǔ)代碼
//創(chuàng)建PPT應(yīng)用程序 POWERPOINT.Application objApp = new POWERPOINT.Application(); POWERPOINT.Presentation objPresSet = null; // 不顯示彈出警告等,最小化窗口應(yīng)用 objApp.DisplayAlerts = POWERPOINT.PpAlertLevel.ppAlertsNone; objApp.WindowState = POWERPOINT.PpWindowState.ppWindowMinimized; //打開(kāi)文件,假設(shè)模板文件名為m1.pptx objPresSet = objApp.Presentations.Open("m1.pptx", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse); //創(chuàng)建查找字典 Dictionary<string, string> Medias = new Dictionary<string, string>(); Medias.Add("組合6","P5_01.MP3"); Medias.Add("組合30", "P5_02.MP3");
核心代碼
//遍歷所有的幻燈片對(duì)象 for (int i = 1; i <= objPresSet.Slides.Count; i++) { POWERPOINT.Slide slide = objPresSet.Slides[i]; //獲取當(dāng)前幻燈片對(duì)象 if (slide.TimeLine.MainSequence.Count == 0) continue; //如果該頁(yè)沒(méi)有動(dòng)畫(huà)效果則短路 ... } //按提供的字典進(jìn)行查找 foreach (string[] pros in Medias) { string f_likecaption = pros[0]; //要查找的動(dòng)畫(huà)標(biāo)題 mediafile = pros[1]; //對(duì)應(yīng)要添加的MP3文件地址 POWERPOINT.Shape wave=null; //初始化一個(gè)聲音變量,在PPT里也是一個(gè)Shape對(duì)象 //遍歷該頁(yè)動(dòng)畫(huà)效果 for (int j = 1; j <= slide.TimeLine.MainSequence.Count; j++) { POWERPOINT.Effect effect = slide.TimeLine.MainSequence[j]; //如果查找到動(dòng)畫(huà)標(biāo)題,則添加對(duì)應(yīng)的聲音文件 if (((effect.Shape.Name + ":" + effect.DisplayName).IndexOf(f_likecaption.Trim()) != -1 { wave = slide.Shapes.AddMediaObject2(mediafile); //添加聲音文件方法 int singleWaveLen = wave.MediaFormat.Length; //記錄聲音的長(zhǎng)度 wave.Left = 60; //shape對(duì)象的位置 wave.AnimationSettings.Animate = Microsoft.Office.Core.MsoTriState.msoTrue; //設(shè)置該對(duì)象要成為動(dòng)畫(huà) wave.AnimationSettings.PlaySettings.PlayOnEntry = Microsoft.Office.Core.MsoTriState.msoTrue; //設(shè)置為允許自動(dòng)播放 wave.AnimationSettings.PlaySettings.HideWhileNotPlaying = Microsoft.Office.Core.MsoTriState.msoTrue; //設(shè)置播放期間是隱藏狀態(tài) wave.AnimationSettings.AdvanceMode = POWERPOINT.PpAdvanceMode.ppAdvanceOnTime;//設(shè)置與上一動(dòng)畫(huà)同時(shí) wave.AnimationSettings.AnimationOrder = slide.TimeLine.MainSequence.Count; //shape對(duì)象的索引位置,默認(rèn)為最后一個(gè),這個(gè)要根據(jù)業(yè)務(wù)邏輯進(jìn)行調(diào)整 break; } }//for .............. }//foreach pros //其它關(guān)鍵屬性 POWERPOINT.Effect effect ; effect.Timing.Duration //返回或設(shè)置以秒為單位的動(dòng)畫(huà)長(zhǎng)度 float WaveLen = float.Parse((singleWaveLen / 1000.0).ToString()); //聲音長(zhǎng)度需要換算成秒
這些代碼我們提供了一些操作PPT相關(guān)的關(guān)鍵方法、屬性,我們需要根據(jù)實(shí)際的業(yè)務(wù)情況進(jìn)行修改,這里僅作參考。
知識(shí)補(bǔ)充
Craneoffice云PPT課件培訓(xùn)視頻生成系統(tǒng)
本系統(tǒng)是Craneoffice.netFramework(基于.net開(kāi)發(fā)的自研發(fā)框架)下的一個(gè)功能組件,它主要能夠?qū)崿F(xiàn),在制作培訓(xùn)課件的后期,生成培訓(xùn)視頻素材,是一款強(qiáng)勁的輔助設(shè)計(jì)工具。
用PPT編寫(xiě)培訓(xùn)視頻課件制作的基本流程如下:
第一步,根據(jù)專業(yè)教材,編寫(xiě)PPT、腳本及動(dòng)畫(huà)指令文件
腳本及動(dòng)畫(huà)指令是一個(gè)WORD文件,請(qǐng)按標(biāo)準(zhǔn)的模板進(jìn)行編寫(xiě),如下圖:
動(dòng)畫(huà)指令如下圖,一個(gè)正確的動(dòng)畫(huà)指令描述,包括三個(gè)部分:
第一部分:動(dòng)畫(huà)效果部分標(biāo)題
第二部分:分隔符,分隔符必須是橫線加右箭頭
第三部分:“講解詞”“起首語(yǔ)”。
如果有多條指令描述,請(qǐng)用回車換行即可。
第二步,將編寫(xiě)好的PPT和腳本文件,上傳到云系統(tǒng),得到語(yǔ)音文本素材包
第三步,使用您常用的語(yǔ)音合成工具,根據(jù)語(yǔ)音文本素材包,批量生成mp3聲音素材包
第四步,在云系統(tǒng)批量上傳mp3聲音素材,系統(tǒng)會(huì)為您生成最終版的PPT文件,下載后即可以生成視頻。
生成的基本原理及結(jié)果如下圖舉例,根據(jù)每頁(yè)的語(yǔ)音講解詞,并根據(jù)動(dòng)畫(huà)指令的條數(shù)生成對(duì)應(yīng)的語(yǔ)音條數(shù),并根據(jù)動(dòng)畫(huà)時(shí)間軸進(jìn)行計(jì)算和插入。
以上就是C#實(shí)現(xiàn)操作PPT動(dòng)畫(huà)窗格并插入音頻文件的詳細(xì)內(nèi)容,更多關(guān)于C#操作PPT的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity5.6大規(guī)模地形資源創(chuàng)建方法
這篇文章主要為大家詳細(xì)介紹了Unity5.6大規(guī)模地形資源創(chuàng)建方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C#讀取XML中元素和屬性值的實(shí)現(xiàn)代碼
用C#讀取xml有很多方式,這里我就先使用XmlDocument讀取Xml,用一段代碼遍歷所有元素,并打印student的所有屬性和子節(jié)點(diǎn)的值2013-04-04.net中前臺(tái)javascript與后臺(tái)c#函數(shù)相互調(diào)用問(wèn)題
.net中前臺(tái)javascript與后臺(tái)c#函數(shù)相互調(diào)用問(wèn)題...2007-12-12