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

简介: 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" 的时间进行累积计算得到的,以此类推。

关键代码

组件库引入

基础代码

//创建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");

核心代码

//遍历所有的幻灯片对象            
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相关的关键方法、属性,我们需要根据实际的业务情况进行修改,这里仅作参考。欢迎大家评论指教!

相关文章
|
2月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
52 1
|
3月前
|
编解码 C# 数据库
C# + WPF 音频播放器 界面优雅,体验良好
【9月更文挑战第18天】这是一个用 C# 和 WPF 实现的音频播放器示例,界面简洁美观,功能丰富。设计包括播放/暂停按钮、进度条、音量控制滑块、歌曲列表和专辑封面显示。功能实现涵盖音频播放、进度条控制、音量调节及歌曲列表管理。通过响应式设计、动画效果、快捷键支持和错误处理,提升用户体验。可根据需求扩展更多功能。
143 3
|
2月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
118 0
|
4月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
125 19
|
4月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
380 2
|
4月前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
41 3
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
4月前
|
C#
C# 写日志文件
C# 写日志文件
52 0
|
6月前
|
C#
【C#】C#读写Excel文件
【C#】C#读写Excel文件
143 1
|
6月前
|
JavaScript 前端开发 C#
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
419 0