zoukankan      html  css  js  c++  java
  • [转]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 } }
  • 相关阅读:
    【C#】Dictionary使用汇总
    【C#】ArrayList使用汇总
    【C#】List使用汇总
    【WPF】ComboBox汇总
    【WPF】TextBox汇总
    【VS】VS2008 在文件中按 Ctrl + F 查找,不弹出查找框
    【VS】调试异常:CLR无法从COM上下文 0x622b440转换为COM上下文 0x622b5b0
    【C#】反序列化时程序集名称不同导致错误
    scrollTop兼容
    iOS下的 Fixed + Input(时间日期选择、select 选择等等) 出现的问题
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/14152856.html
Copyright © 2011-2022 走看看