代码
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 }
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 }