博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# PowerPoint操作的基本用法。

Posted on 2011-02-14 10:42  hyruur  阅读(3657)  评论(2编辑  收藏  举报

 

代码
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using OFFICECORE = Microsoft.Office.Core;
  6 using POWERPOINT = Microsoft.Office.Interop.PowerPoint;
  7 using System.Windows;
  8 using System.Collections;
  9 using System.Windows.Controls;
 10 namespace PPTDraw.PPTOperate
 11 {
 12     /// <summary>
 13     /// PPT文档操作实现类.
 14     /// </summary>
 15     public class OperatePPT
 16     {
 17         #region=========基本的参数信息=======
 18         POWERPOINT.Application objApp = null;
 19         POWERPOINT.Presentation objPresSet = null;
 20         POWERPOINT.SlideShowWindows objSSWs;
 21         POWERPOINT.SlideShowTransition objSST;
 22         POWERPOINT.SlideShowSettings objSSS;
 23         POWERPOINT.SlideRange objSldRng;
 24         bool bAssistantOn;
 25         double pixperPoint = 0;
 26         double offsetx = 0;
 27         double offsety = 0;
 28         #endregion
 29         #region===========操作方法==============
 30         /// <summary>
 31         /// 打开PPT文档并播放显示。
 32         /// </summary>
 33         /// <param name="filePath">PPT文件路径</param>
 34         public void PPTOpen(string filePath)
 35         {
 36             //防止连续打开多个PPT程序.
 37             if (this.objApp != null) { return; }
 38             try
 39             {
 40                 objApp = new POWERPOINT.Application();
 41                 //以非只读方式打开,方便操作结束后保存.
 42                 objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
 43                 //Prevent Office Assistant from displaying alert messages:
 44                 bAssistantOn = objApp.Assistant.On;
 45                 objApp.Assistant.On = false;
 46                 objSSS = this.objPresSet.SlideShowSettings;
 47                 objSSS.Run();
 48             }
 49             catch (Exception ex)
 50             {
 51                 this.objApp.Quit();
 52             }
 53         }
 54         /// <summary>
 55         /// 自动播放PPT文档.
 56         /// </summary>
 57         /// <param name="filePath">PPTy文件路径.</param>
 58         /// <param name="playTime">翻页的时间间隔.【以秒为单位】</param>
 59         public void PPTAuto(string filePath, int playTime)
 60         {
 61             //防止连续打开多个PPT程序.
 62             if (this.objApp != null) { return; }
 63             objApp = new POWERPOINT.Application();
 64             objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoCTrue, OFFICECORE.MsoTriState.msoFalse, OFFICECORE.MsoTriState.msoFalse);
 65             // 自动播放的代码(开始)
 66             int Slides = objPresSet.Slides.Count;
 67             int[] SlideIdx = new int[Slides];
 68             for (int i = 0; i < Slides; i++) { SlideIdx[i] = i + 1; };
 69             objSldRng = objPresSet.Slides.Range(SlideIdx);
 70             objSST = objSldRng.SlideShowTransition;
 71             //设置翻页的时间.
 72             objSST.AdvanceOnTime = OFFICECORE.MsoTriState.msoCTrue;
 73             objSST.AdvanceTime = playTime;
 74             //翻页时的特效!
 75             objSST.EntryEffect = POWERPOINT.PpEntryEffect.ppEffectCircleOut;
 76             //Prevent Office Assistant from displaying alert messages:
 77             bAssistantOn = objApp.Assistant.On;
 78             objApp.Assistant.On = false;
 79             //Run the Slide show from slides 1 thru 3.
 80             objSSS = objPresSet.SlideShowSettings;
 81             objSSS.StartingSlide = 1;
 82             objSSS.EndingSlide = Slides;
 83             objSSS.Run();
 84             //Wait for the slide show to end.
 85             objSSWs = objApp.SlideShowWindows;
 86             while (objSSWs.Count >= 1) System.Threading.Thread.Sleep(playTime * 100);
 87             this.objPresSet.Close();
 88             this.objApp.Quit();
 89         }
 90         /// <summary>
 91         /// PPT下一页。
 92         /// </summary>
 93         public void NextSlide()
 94         {
 95             if (this.objApp != null)
 96                 this.objPresSet.SlideShowWindow.View.Next();
 97         }
 98         /// <summary>
 99         /// PPT上一页。
100         /// </summary>
101         public void PreviousSlide()
102         {
103             if (this.objApp != null)
104                 this.objPresSet.SlideShowWindow.View.Previous();
105         }
106         /// <summary>
107         /// 对当前的PPT页面进行图片插入操作。
108         /// </summary>
109         /// <param name="alImage">图片对象信息数组</param>
110         /// <param name="offsetx">插入图片距离左边长度</param>
111         /// <param name="pixperPoint">距离比例值</param>
112         /// <returns>是否添加成功!</returns>
113         public bool InsertToSlide(List<PPTOBJ> listObj)
114         {
115             bool InsertSlide = false;
116             if (this.objPresSet != null)
117             {
118                 this.SlideParams();
119                 int slipeint = objPresSet.SlideShowWindow.View.CurrentShowPosition;
120                 foreach (PPTOBJ myobj in listObj)
121                 {
122                     objPresSet.Slides[slipeint].Shapes.AddPicture(
123                          myobj.Path,           //图片路径
124                          OFFICECORE.MsoTriState.msoFalse,
125                          OFFICECORE.MsoTriState.msoTrue,
126                          (float)((myobj.X - this.offsetx) / this.pixperPoint),       //插入图片距离左边长度
127                          (float)(myobj.Y / this.pixperPoint),       //插入图片距离顶部高度
128                          (float)(myobj.Width / this.pixperPoint),   //插入图片的宽度
129                          (float)(myobj.Height / this.pixperPoint)   //插入图片的高度
130                       );
131                 }
132                 InsertSlide = true;
133             }
134             return InsertSlide;
135         }
136         /// <summary>
137         /// 计算InkCanvas画板上的偏移参数,与PPT上显示图片的参数。
138         /// 用于PPT加载图片时使用
139         /// </summary>
140         private void SlideParams()
141         {
142             double slideWidth = this.objPresSet.PageSetup.SlideWidth;
143             double slideHeight = this.objPresSet.PageSetup.SlideHeight;
144             double inkCanWidth = SystemParameters.PrimaryScreenWidth;//inkCan.ActualWidth;
145             double inkCanHeight = SystemParameters.PrimaryScreenHeight;//inkCan.ActualHeight ;
146             if ((slideWidth / slideHeight) > (inkCanWidth / inkCanHeight))
147             {
148                 this.pixperPoint = inkCanHeight / slideHeight;
149                 this.offsetx = 0;
150                 this.offsety = (inkCanHeight - slideHeight * this.pixperPoint) / 2;
151             }
152             else
153             {
154                 this.pixperPoint = inkCanHeight / slideHeight;
155                 this.offsety = 0;
156                 this.offsetx = (inkCanWidth - slideWidth * this.pixperPoint) / 2;
157             }
158         }
159         /// <summary>
160         /// 关闭PPT文档。
161         /// </summary>
162         public void PPTClose()
163         {
164             //装备PPT程序。
165             if (this.objPresSet != null)
166             {
167                 //判断是否退出程序,可以不使用。
168                 //objSSWs = objApp.SlideShowWindows;
169                 //if (objSSWs.Count >= 1)
170                 //{
171                     if (MessageBox.Show("是否保存修改的笔迹!""提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
172                         this.objPresSet.Save();
173                 //}
174                 //this.objPresSet.Close();
175             }
176             if (this.objApp != null)
177                 this.objApp.Quit();
178             GC.Collect();
179         }
180         #endregion
181     }
182 }