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. PouchDB:JavaScript同步数据库

    简介 PouchDB是受 Apache CouchDB启发为Web设计的一款占用空间少的数据库.PouchDB项目的目标是帮助开发者构建线上和线下都能很好地使用的Web应用程序,在应用程序离线的时候, ...

  2. 报错org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet"

    org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n ...

  3. Echarts怎么用后台传来的json数据

    Echarts怎么用后台传来的json数据 <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...

  4. 洛谷P2296 寻找道路 [拓扑排序,最短路]

    题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  5. python3 怎么爬取新闻网站?

    先开个坑,以后再填吧....... import requests from bs4 import BeautifulSoup def content(url): text = requests.ge ...

  6. Python之路【第一篇】:介绍、基本语法、流程控制

    一.python 简介 python 特点 Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网 ...

  7. POJ1916 Period KMP

    http://poj.org/problem?id=1961 判断某一字符串中 , 哪些前缀子串有周期 , 输出子串长度以及子串中周期重复的次数 ( 次数>1 )  需要的只是对KMP性质的进一 ...

  8. 【筛法求素数】【推导】【组合数】UVALive - 7642 - Prime Distance

    题意:n个格子,m个球,让你把球放入某些格子里,使得所有有球的格子之间的距离(abs(i-j))均为素数 ,让你输出方案数. 只占一个格子或者两个格子显然可行. 占有三个格子的情况下,则必须保证其中两 ...

  9. bzoj 3585: mex && 3339: Rmq Problem -- 主席树

    3585: mex Time Limit: 20 Sec  Memory Limit: 128 MB Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区 ...

  10. bzoj1123 Blockade

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...