C#操作PPT动画窗格并插入音频文件的一些思路

目录

系统环境

基础配置

设计想法

关键代码

组件库引入

基础代码

核心代码

总结


系统环境

在 Windows Server 2019 操作系统上安装Office PowerPoint 2016或以上

安装 .netFramework4.7.1以上

开发工具 VS2019 语言 C#

基础配置

打开控制面板、管理工具、组件服务:

点击组件服务、计算机、我的电脑、DCOM配置

找到Microsoft PowerPoint应用程序

选择属性、打开标识选项卡、选择下列用户选项,设置启动PPT应用的用户,点确定即可。

设计想法

由用户设计PPT及每页的动画效果,并以此为模板,与给定的一组音频文件,通过程序控制进行二次合成,插入的依据则是根据提供的动画标题进行搜索定位(标题可以模糊搜索)。这个设计想法来源于我的文章 Craneoffice云PPT课件培训视频生成系统,可参考一下。

我们假设如下图,要在两组动画效果中,执行完成一个动画效果后插入一段音频讲解词,动画效果的标题为:

(1)组合6:对应插入P5_01.MP3讲解词。

(1)组合30:对应插入P5_02.MP3讲解词。

那么设计原理,就是遍历动画窗格的动画效果对象,记录对象的持续时间和延迟时间,插入音频后,则下一个动画效果的延迟时间根据上一动画效果对象的时间和音频的时间累积进行计算,并更改动画效果的开始条件,如下图:

如图,下一个动画效果对象的延迟时间重新计算,是根据"组合6" 和 "P5_01" 的时间进行累积计算得到的,以此类推。

关键代码

组件库引入

基础代码

cs 复制代码
//创建PPT应用程序            
    POWERPOINT.Application objApp = new POWERPOINT.Application();
    POWERPOINT.Presentation objPresSet = null;

// 不显示弹出警告等,最小化窗口应用
    objApp.DisplayAlerts = POWERPOINT.PpAlertLevel.ppAlertsNone;
    objApp.WindowState = POWERPOINT.PpWindowState.ppWindowMinimized;
    
//打开文件,假设模板文件名为m1.pptx
    objPresSet = objApp.Presentations.Open("m1.pptx", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);

//创建查找字典
    Dictionary<string, string> Medias = new Dictionary<string, string>();
    Medias.Add("组合6","P5_01.MP3");
    Medias.Add("组合30", "P5_02.MP3");

核心代码

cs 复制代码
//遍历所有的幻灯片对象            
for (int i = 1; i <= objPresSet.Slides.Count; i++)
{

    POWERPOINT.Slide slide = objPresSet.Slides[i];   //获取当前幻灯片对象
    if (slide.TimeLine.MainSequence.Count == 0) continue;  //如果该页没有动画效果则短路
    ...
}







//按提供的字典进行查找 
foreach (string[] pros in Medias)
{
    string f_likecaption = pros[0];  //要查找的动画标题
    mediafile = pros[1];             //对应要添加的MP3文件地址
    POWERPOINT.Shape wave=null;      //初始化一个声音变量,在PPT里也是一个Shape对象
    //遍历该页动画效果
    for (int j = 1; j <= slide.TimeLine.MainSequence.Count; j++)
    {
      POWERPOINT.Effect effect = slide.TimeLine.MainSequence[j];
       //如果查找到动画标题,则添加对应的声音文件
      if (((effect.Shape.Name + ":" + effect.DisplayName).IndexOf(f_likecaption.Trim()) != -1
      {
         wave = slide.Shapes.AddMediaObject2(mediafile);  //添加声音文件方法
         int  singleWaveLen = wave.MediaFormat.Length;    //记录声音的长度
         wave.Left = 60;                                  //shape对象的位置
         wave.AnimationSettings.Animate = Microsoft.Office.Core.MsoTriState.msoTrue; //设置该对象要成为动画
         wave.AnimationSettings.PlaySettings.PlayOnEntry = Microsoft.Office.Core.MsoTriState.msoTrue; //设置为允许自动播放
         wave.AnimationSettings.PlaySettings.HideWhileNotPlaying = Microsoft.Office.Core.MsoTriState.msoTrue; //设置播放期间是隐藏状态
         wave.AnimationSettings.AdvanceMode = POWERPOINT.PpAdvanceMode.ppAdvanceOnTime;//设置与上一动画同时
         wave.AnimationSettings.AnimationOrder = slide.TimeLine.MainSequence.Count;
//shape对象的索引位置,默认为最后一个,这个要根据业务逻辑进行调整 
         break;
      }
     }//for
     
    ..............

}//foreach pros




//其它关键属性 
POWERPOINT.Effect effect ;
effect.Timing.Duration  //返回或设置以秒为单位的动画长度

float WaveLen = float.Parse((singleWaveLen / 1000.0).ToString()); //声音长度需要换算成秒

总结

这些代码我们提供了一些操作PPT相关的关键方法、属性,我们需要根据实际的业务情况进行修改,这里仅作参考。欢迎大家评论指教!

相关推荐
u0133087091 天前
PPT工具集
powerpoint
小众AI1 天前
pptx2md - 将PPT文件转换成Markdown
人工智能·powerpoint·ai编程
Quz2 天前
如何使用 DeepSeek + Kimi 自动生成PPT
powerpoint·deepseek
剑盾云安全专家3 天前
如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效
人工智能·科技·aigc·powerpoint·软件
剑盾云安全专家3 天前
如何利用AI一键生成PPT,提升工作效率和创意灵感
人工智能·科技·学习·aigc·powerpoint·软件
winfredzhang6 天前
使用Python开发PPT批量转图片(合并)
python·powerpoint·合并·截图
小马哥编程7 天前
【PPT】PPT中通过方框、边界、文字、 颜色等组合来表达设计自己的思路
powerpoint
阿里云云原生8 天前
智能理解 PPT 内容,快速生成讲解视频
人工智能·powerpoint·音视频
木易GIS8 天前
要替换PPT左上角的logo,可以通过几种方法实现‌。
powerpoint·ppt
小马不是哥哥9 天前
ASAP Utilities:Excel 插件中的高效助手
pdf·powerpoint·excel·notepad++·ipad