C#控制ppt的代码

包括打开ppt文件、读取幻灯页,插入幻灯片,自动播放等

using System.Collections.Generic;

using System.Linq;

using System.Text;

using OFFICECORE = Microsoft.Office.Core;

using POWERPOINT = Microsoft.Office.Interop.PowerPoint;

using System.windows;

using System.Collections;

using System.windows.Controls;

namespace PPTDraw.PPTOperate

{

/// <summary>

/// PPT文档操作实现类.

/// </summary>

public class OperatePPT

{

#region=========基本的参数信息=======

POWERPOINT.Application objApp = null;

POWERPOINT.Presentation objPresSet = null;

POWERPOINT.SlideShowwindows objSSWs;

POWERPOINT.SlideShowTransition objSST;

POWERPOINT.SlideShowSettings objSSS;

POWERPOINT.SlideRange objSldRng;

bool bAssistantOn;

double pixperPoint = 0;

double offsetx = 0;

double offsety = 0;

#endregion

#region===========操作方法==============

/// <summary>

/// 打开PPT文档并播放显示。

/// </summary>

/// <param name="filePath">PPT文件路径</param>

public void PPTOpen(string filePath)

{

//防止连续打开多个PPT程序.

if (this.objApp != null) { return; }

try

{

objApp = new POWERPOINT.Application();

//以非只读方式打开,方便操作结束后保存.

objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);

//Prevent Office Assistant from displaying alert messages:

bAssistantOn = objApp.Assistant.On;

objApp.Assistant.On = false;

objSSS = this.objPresSet.SlideShowSettings;

objSSS.Run();

}

catch (Exception ex)

{

this.objApp.Quit();

}

}

/// <summary>

/// 自动播放PPT文档.

/// </summary>

/// <param name="filePath">PPTy文件路径.</param>

/// <param name="playTime">翻页的时间间隔.【以秒为单位】</param>

public void PPTAuto(string filePath, int playTime)

{

//防止连续打开多个PPT程序.

if (this.objApp != null) { return; }

objApp = new POWERPOINT.Application();

objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);

// 自动播放的代码(开始)

int Slides = objPresSet.Slides.Count;

int[] SlideIdx = new int[Slides];

for (int i = 0; i < Slides; i++) { SlideIdx[i] = i + 1; };

objSldRng = objPresSet.Slides.Range(SlideIdx);

objSST = objSldRng.SlideShowTransition;

//设置翻页的时间.

objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;

objSST.AdvanceTime = playTime;

//翻页时的特效!

objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectCircleOut;

//Prevent Office Assistant from displaying alert messages:

bAssistantOn = objApp.Assistant.On;

objApp.Assistant.On = false;

//Run the Slide show from slides 1 thru 3.

objSSS = objPresSet.SlideShowSettings;

objSSS.StartingSlide = 1;

objSSS.EndingSlide = Slides;

objSSS.Run();

//Wait for the slide show to end.

objSSWs = objApp.SlideShowwindows;

while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(playTime * 100);

this.objPresSet.Close();

this.objApp.Quit();

}

/// <summary>

/// PPT下一页。

/// </summary>

public void NextSlide()

{

if (this.objApp != null)

this.objPresSet.SlideShowwindow.View.Next();

}

/// <summary>

/// PPT上一页。

/// </summary>

public void PreviousSlide()

{

if (this.objApp != null)

this.objPresSet.SlideShowwindow.View.Previous();

}

/// <summary>

/// 对当前的PPT页面进行图片插入操作。

/// </summary>

/// <param name="alImage">图片对象信息数组</param>

/// <param name="offsetx">插入图片距离左边长度</param>

/// <param name="pixperPoint">距离比例值</param>

/// <returns>是否添加成功!</returns>

public bool InsertToSlide(List<PPTOBJ> listObj)

{

bool InsertSlide = false;

if (this.objPresSet != null)

{

this.SlideParams();

int slipeint = objPresSet.SlideShowwindow.View.CurrentShowPosition;

foreach (PPTOBJ myobj in listObj)

{

objPresSet.Slides[slipeint].Shapes.AddPicture(

myobj.Path,      //图片路径

OFFICECORE.MsoTriState.msoFalse,

OFFICECORE.MsoTriState.msoTrue,

(float)((myobj.X - this.offsetx) / this.pixperPoint),    //插入图片距离左边长度

(float)(myobj.Y / this.pixperPoint),    //插入图片距离顶部高度

(float)(myobj.Width / this.pixperPoint),  //插入图片的宽度

(float)(myobj.Height / this.pixperPoint)  //插入图片的高度

);

}

InsertSlide = true;

}

return InsertSlide;

}

/// <summary>

/// 计算InkCanvas画板上的偏移参数,与PPT上显示图片的参数。

/// 用于PPT加载图片时使用

/// </summary>

private void SlideParams()

{

double slideWidth = this.objPresSet.PageSetup.SlideWidth;

double slideHeight = this.objPresSet.PageSetup.SlideHeight;

double inkCanWidth = SystemParameters.PrimaryScreenWidth;//inkCan.ActualWidth;

double inkCanHeight = SystemParameters.PrimaryScreenHeight;//inkCan.ActualHeight ;

if ((slideWidth / slideHeight) > (inkCanWidth / inkCanHeight))

{

this.pixperPoint = inkCanHeight / slideHeight;

this.offsetx = 0;

this.offsety = (inkCanHeight - slideHeight * this.pixperPoint) / 2;

}

else

{

this.pixperPoint = inkCanHeight / slideHeight;

this.offsety = 0;

this.offsetx = (inkCanWidth - slideWidth * this.pixperPoint) / 2;

}

}

/// <summary>

/// 关闭PPT文档。

/// </summary>

public void PPTClose()

{

//装备PPT程序。

if (this.objPresSet != null)

{

//判断是否退出程序,可以不使用。

//objSSWs = objApp.SlideShowwindows;

//if (objSSWs.Count >= 1)

//{

if (MessageBox.Show("是否保存修改的笔迹!", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)

this.objPresSet.Save();

//}

//this.objPresSet.Close();

}

if (this.objApp != null)

this.objApp.Quit();

GC.Collect();

}

#endregion

}

}

本文出自 “我的笔记” 博客,请务必保留此出处http://9891814.blog.51cto.com/9881814/1627298

c#如何操作ppt的播放 【转】的更多相关文章

  1. winfrom 操作PPT

    ///winfrom 操作PPT using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  2. JAVA通过COM接口操作PPT

    一. 背景说明 在Eclipse环境下,开发JAVA代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,即先收工创建好模板,在程序中修改模板数据. ...

  3. C++通过COM接口操作PPT

    一. 背景 在VS环境下,开发C++代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,先手工创建好PPT模板,在程序中修改模板数据. 二. 开发 ...

  4. java poi 操作ppt

    java poi 操作ppt 可以参考: https://www.w3cschool.cn/apache_poi_ppt/apache_poi_ppt_installation.html http:/ ...

  5. 实现ppt幻灯片播放倒计时

    需求:为控制会议时间,采取ppt幻灯片播放倒计时的办法,倒计时5分钟. 分析:用EnumWindows枚举窗口,发现PPT窗口类名有三种:PP12FrameClass.MS-SDIb.screenCl ...

  6. Jacob操作ppt

    前几天使用Apache 的POI操作ppt,后来发现转成的图片出现乱码,而且处理了之后,还会有遗留 因此决定换一种处理方式 Jacob 是 JAVA-COM Bridge的缩写,是一个中间件,能够提供 ...

  7. poi 操作 PPT,针对 PPTX--图表篇

    poi 操作 PPT,针对 PPTX--图表篇 目录 poi 操作 PPT,针对 PPTX--图表篇 1.读取 PPT 模板 2.替换标题 4.替换图表数据 接下来对 ppt 内的图表进行操作,替换图 ...

  8. C# 操作PPt,去掉文本框的边框

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using OFFICECO ...

  9. (转)C#操作PPT

    原文地址:http://blog.163.com/loveyingchun_1314/blog/static/2382425120124312627530/ 引用Microsoft.Office.Co ...

随机推荐

  1. Oracle中生成uuid的方法

    Oracle中生成uuid的方法 下载LOFTER客户端 在Oracle SQL 提供了一个生成uuid的函数sys_guid: http://download.oracle.com/docs/cd/ ...

  2. 《Android虚拟机》----虚拟机概述

    No1: 虚拟机是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离的环境中的完整计算机系统. No2: Java虚拟机由如下五个部分组成:一组指令集.一组寄存器.一个栈.一个无用单元收集堆. ...

  3. 113. 路径总和 II

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...

  4. Wannafly挑战赛7 C - 小Q与氪金游戏

    题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...

  5. 洛谷P2680 运输计划 [LCA,树上差分,二分答案]

    题目传送门 运输计划 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间, 这 n?1 条航道连通了 L 国的所 ...

  6. python笔记六:进程与线程

    1.进程 1)调用unix/linux系统中的进程函数fork(),用法和linux相同,调用成功返回0,失败返回-1: import os print 'Process (%s) start...' ...

  7. Android签名打包详解

    一.      Android签名有什么作用? 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序.如果你采用 ...

  8. Django Restframework 实践(一)

    具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...

  9. android 捕获所有异常 未捕获的异常

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 定义一个类 继承 应用, 实现 未捕获异常处理器 uncaughtExceptionHa ...

  10. [CodeForces-797F]Mice and Holes

    题目大意: 在一条直线上,有n个老鼠,m个洞. 每个老鼠i都有一个初始位置x[i]. 每个洞i都有一个固定位置p[i]和容量限制c[i]. 求所有老鼠都进洞的最小距离总和. 思路: 动态规划. 用f[ ...