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. ubuntu1604 安装samba

    ubuntu1604 安装samba sudo apt-get install samba 更改/etc/samba/smb.conf添加[share]comment = sharepath = /h ...

  2. poj1321 棋盘问题(DFS)

    题目链接 http://poj.org/problem?id=1321 题意 给定一块棋盘(棋盘可能是不规则的),有k个相同棋子,将k个棋子摆放在棋盘上,使得任意两个棋子不同行,不同列,求有多少种不同 ...

  3. BZOJ1102 [POI2007]GRZ山峰和山谷 [BFS]

    题目传送门 GRZ山峰和山谷 Description FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷.为了能够让他对他的旅程有一个安排,他想知道山峰和山谷的数量.给定一个地图,为FGD想要 ...

  4. C# 消除累计误差的倒计时

    使用 C# 中自带的各种 timer 计时,都会有累计误差,以下代码实现了一种消除累计误差的方法,使得每次计时的误差,空值在 100 ms 以内(可以通过修改代码提升精度.) 对于精度要求在秒级别的简 ...

  5. Wannafly挑战赛17 B

    题解 大概就是求证这个 \[\sum_i^nC_{n}^i*C_n^i = C_{2n}^n\] 证明: \[(1+x)^{2n} = [C(0,n)+C(1,n)*x+...+C(n,n)*x^n] ...

  6. Mac 显示隐藏的文件

    要显示隐藏文件: 在终端中输入代码:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏文件: 在终端输入代码:default ...

  7. JDK源码(1.7) -- java.util.Map<K,V>

     java.util.Map<K,V> 源码分析 --------------------------------------------------------------------- ...

  8. MYSQL学习笔记 (六)explain分析查询

    使用EXPLAIN可以模拟优化器执行SQL语句,从而知道MYSQL是如何处理你的SQL,从而分析查询语句或者表结构的瓶颈.

  9. HttpURLConnection与 HttpClient 区别/性能测试对比

    HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...

  10. Object-C—集合

    Obejct-C中包含了三种集合,分别是:数组.字典和集(set).       数组和C语言中的数组相似,但是OC中的数组只能存储对象,不能存储基本数据类型,如int.float.enum.stru ...