C#操作PowerPoint的方法

所属分类: 软件编程 / C#教程 阅读数: 63
收藏 0 赞 0 分享

本文实例讲述了C#操作PowerPoint的方法。分享给大家供大家参考。具体如下:

这里C#操作PowerPoint的基本代码,包括打开ppt文件、读取幻灯页,插入幻灯片,自动播放等

using System;
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
  }
}

希望本文所述对大家的C#程序设计有所帮助。

更多精彩内容其他人还在看

C#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多