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

news2024/11/15 5:09:54

目录

系统环境

基础配置

设计想法

关键代码

组件库引入

基础代码

核心代码

总结


系统环境

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1075030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW使用VI Package Manager(VIPM)下载和管理附加组件

LabVIEW使用VI Package Manager&#xff08;VIPM&#xff09;下载和管理附加组件 LabVIEW Tools Network和VI Package Manager&#xff08;VIPM&#xff09;使浏览&#xff0c;下载和管理LabVIEW附加组件变得容易。它具有软件包存储库&#xff0c;可以从桌面连接到软件包&…

基于差分进化优化的BP神经网络(分类应用) - 附代码

基于差分进化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于差分进化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.差分进化优化BP神经网络3.1 BP神经网络参数设置3.2 差分进化算法应用 4.测试结果…

基于原子搜索优化的BP神经网络(分类应用) - 附代码

基于原子搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于原子搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.原子搜索优化BP神经网络3.1 BP神经网络参数设置3.2 原子搜索算法应用 4.测试结果…

全面分析“找不到XINPUTI_3.dll无法继续执行代码”的5个解决方法总结

电脑已经成为我们生活&#xff0c;娱乐和工作中不可或缺的一部分&#xff0c;电子游戏是许多人的日常娱乐方式。然而&#xff0c;当我们沉浸在游戏的乐趣中时&#xff0c;有时会遇到一些问题&#xff0c;比如“找不到XINPUTI_3.dll”这样的错误提示。这种错误通常会导致游戏无法…

Android学习从入门到放弃(文末有福利)

移动开发早就不是最热门的程序员职业了&#xff0c;而且移动开发也并不是一个能够在短时间内轻松掌握的领域,需要我们有足够的耐心和毅力 作为一个在Android开发领域积累了不少经验的开发者&#xff0c;自己也看了不少书&#xff0c;也和不少前辈交流过&#xff0c;在这里分享一…

98 # jwt

什么是 jwt JSON WEB TOKEN (jwt) 是目前最流行的跨域身份验证解决方案。 解决问题&#xff1a;session 不支持分布式框架&#xff0c;无法支持横向扩展&#xff0c;只能通过数据库来保存会话数据实现共享&#xff0c;如果持久层失效就会出现认证失败。 优点&#xff1a;服务…

强化学习问题(二)--- ERROR: Failed building wheel for box2d-py

错误&#xff1a;Could not build wheels for box2d-py, which is required to install pyproject.toml-based projects pyproject.toml-based projects&#xff1a;意思是缺少依赖包&#xff0c;对于box2d就是缺少swig 注意&#xff1a;安装python对应的swig版本 解决1&…

2023 NewStarCTF --- wp

文章目录 前言Week1MiscCyberChefs Secret机密图片流量&#xff01;鲨鱼&#xff01;压缩包们空白格隐秘的眼睛 Web泄露的秘密Begin of UploadErrorFlaskBegin of HTTPBegin of PHPR!C!E!EasyLogin CryptobrainfuckCaesars SecertfenceVigenrebabyrsaSmall dbabyxorbabyencodin…

CART 算法——决策树

目录 1.CART的生成&#xff1a; &#xff08;1&#xff09;回归树的生成 &#xff08;2&#xff09;分类树的生成 ①基尼指数 ②算法步骤 2.CART剪枝&#xff1a; &#xff08;1&#xff09;损失函数 &#xff08;2&#xff09;算法步骤&#xff1a; CART是英文“class…

【Java 进阶篇】创建 HTML 注册页面

在这篇博客中&#xff0c;我们将介绍如何创建一个简单的 HTML 注册页面。HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于构建网页的结构和内容。创建一个注册页面是网页开发的常见任务之一&#xff0c;它允许用户提供个人信息并注册成为…

Logo制作方法大公开:初学者也能学会的Logo设计教程

Logo是品牌或企业的象征&#xff0c;一个好的Logo可以提升品牌的认知度和美誉度。但是&#xff0c;很多人在设计自己的Logo时都会遇到一些困难。今天&#xff0c;我们将为你揭示Logo制作的技巧和秘密&#xff0c;让你轻松设计出专业水准的Logo。 首先&#xff0c;你需要注册并登…

FPGA project : sobel

实验目标&#xff1a; sobel算法&#xff0c;处理100X100灰度图像&#xff1a;野火logo 边缘检测&#xff1a; 边缘检测&#xff0c;针对的是灰度图像&#xff0c;顾名思义&#xff0c;检测图像的边缘&#xff0c;是针对图像像素点的一种计算&#xff0c;目的是标识数字图像…

VM虚拟机扩容

背景介绍 在实现3D结构光扫描算法移植到嵌入式平台jetson Xavier NX时&#xff0c;需要在windows的电脑上安装VM虚拟机搭载Ubuntu&#xff0c;然后在Ubuntu 18.04上安装开发软件Nsight Eclipse Edition&#xff0c;在该集成开发软件上交叉编译jetson aarc64架构上可运行的文件…

SAE-J1939-21 (超8字节)多包数据----CAN传输协议

一、协议数据单元&#xff08;PDU&#xff09; 1. 优先级&#xff08;P&#xff09; 消息优先级可从最高 0&#xff08;000&#xff09;设置到最低 7&#xff08;111&#xff09;。 2. 保留位&#xff08;R&#xff09; 保留此位以备今后开发使用。 3. 数据页&#xff08;D…

中国移动咪咕、阿里云、华为“秀肌肉”,这届亚运会的“高光”不止比赛

文 | 智能相对论 作者 | 青月 竞技体育的发展&#xff0c;其实也可以看作是一部“技术进化史”。 在1924年的巴黎&#xff0c;广播首次进入奥运会&#xff0c;人们第一次可以通过报纸以外的方式了解奥运会。 1928年&#xff0c;在荷兰申办的阿姆斯特丹奥运会&#xff0c;高…

mi note3 刷入lineageos

下载 twrp TWRP是国外安卓爱好者开发的一款工具&#xff0c;全名为Team Win Recovery Project&#xff0c;主要作用包括刷机、备份 &#xff0c;救砖。 https://twrp.me/xiaomi/xiaomiminote3.html 一般下载最新版本&#xff0c;mi note 3对应 https://dl.twrp.me/jason/twrp-…

Hadoop----Azkaban的使用与一些报错问题的解决

1.因为官方只放出源码&#xff0c;并没有放出其tar包&#xff0c;所以需要我们自己编译&#xff0c;通过查阅资料我们可以使用gradlew对其进行编译&#xff0c;还是比较简单&#xff0c;然后将里面需要用到的服务文件夹进行拷贝&#xff0c;完善其文件夹结构&#xff0c;通常会…

Android笔记(二):JetPack Compose定义移动界面概述

一、JetPack Compose组件概述 JetPack Compose是Google公司在2021年正式推出的声明式UI工具包。Compose库用于开发原生Android应用界面。它取代传统XML文件配置界面&#xff0c;不需要界面编辑工具&#xff0c;而是采用强大Kotlin API以及函数搭建移动应用界面&#xff0c;代码…

请求的转发和重定向

RequestDispatcher接口实现转发&#xff1a; jsp1上链接到Servlet&#xff0c;Servlet再转发&#xff08;关键在这里怎么实现转发&#xff1f;&#xff1f;&#xff09; 演示index.html页面---->Servlet1(转发到)------>Servlet2 实现转发流程 1.用HttpServletReques…

如何使用CDN加载静态资源

文章目录 前言工具场景七牛云创建空间存储 控制台查看后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误…