软件编程
位置:首页>> 软件编程>> C#编程>> C#操作PowerPoint的方法

C#操作PowerPoint的方法

作者:重负在身  发布时间:2023-03-17 03:48:16 

标签:C#,操作,PowerPoint

本文实例讲述了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#程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com