[转]C# PowerPoint操作的基本用法

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;

amespace 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;
           //上面两行代码需要注释掉,否则编译不通过。从Office 2007(含)之后,Microsoft office assistant [closed]已经不能再正常使用了
                  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;
        //上面两行代码需要注释掉,否则编译不通过。从Office 2007(含)之后,
Microsoft office assistant [closed]已经不能再正常使用了
        //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();//调用这一句代码,在播放结束后关闭PPT时会报错:Presentation (unknown member) : Object does not exist.

        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)//PPTOBJ是无法识别的类型 { 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 } }

 

posted @ 2020-12-18 00:19  rainbow70626  阅读(495)  评论(0编辑  收藏  举报