VSTO二次开发PPT插件

c#生成PPT总结(用Microsoft.Office.Interop插件)

引用自:https://bbs.csdn.net/topics/391937345

1.在项目中添加引用 Microsoft PowerPoint 14.0 Object Library
2. using Microsoft.Office.Interop.PowerPoint;
3.创建一个PPT,添加一个空白页
Microsoft.Office.Interop.PowerPoint.Application PPT = new Microsoft.Office.Interop.PowerPoint.Application();//创建PPT应用
Microsoft.Office.Interop.PowerPoint.Presentation MyPres = null;//PPT应用的实例
Microsoft.Office.Interop.PowerPoint.Slide MySlide = null;//PPT中的幻灯片


MyPres = PPT.Presentations.Open("文件路径", MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue);//此处将一个PPT实例给了MyPres

MySlide = MyPres.Slides.Add(1, Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank);//像PPT实例中,添加一个空白页,位置是“第一页”

4.向PPT的幻灯片中添加元素

4.1文本框

Microsoft.Office.Interop.PowerPoint.TextRange MyTextRng = null;

MySlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 21.5F, 365F, 670F, 270F);

MyTextRng = MySlide.Shapes[1].TextFrame.TextRange;//请注意此处Shapes的索引,由于文本框是第一个添加的Shapes,所以此处索引是1。

MyTextRng.Font.NameFarEast = "微软雅黑";//文本框中,中文的字体                   
MyTextRng.Font.NameAscii = "Calibri";//文本框中,英文和数字的字体      
MyTextRng.Text ="C#生成PPT";//显示的内容
MyTextRng.Font.Bold = MsoTriState.msoTrue;//是否加粗
MyTextRng.Font.Color.RGB = A+ B * 256 + C * 256 * 256;//字体颜色,其中ABC直接用自定义颜色中的数字代替即可。
MyTextRng.Characters(1, 10).Font.Size = 24;//个性化设计。第1个字符开始,长度为10的字符,字体大小是24.
MyTextRng.ParagraphFormat.Alignment = Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft;//文本对齐方式(水平方向)
MySlide.Shapes[1].TextFrame.VerticalAnchor = MsoVerticalAnchor.msoAnchorMiddle; 文本对齐方式(垂直方向)


心得:最重要的设置在Font属性中。其他设置,基本可以参考PPT中元素属性的设置方式来找到。比如我在写文本水平对齐方式时(左对齐,居中,右对齐),在PPT中,我们直接点击“段落”中的快捷键即可。所以我就找“段落”的英文,正好Alignment是对齐的意思,所以就找到了。


4.2 图形(矩形)

MySlide.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, 8.5F, 6.5F, 705F, 525F);

MySlide.Shapes[1].Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;//改变线条颜色
MySlide.Shapes[1].Fill.Transparency = 1;//控制填充色为透明
MySlide.Shapes[1].Line.Style = MsoLineStyle.msoLineSingle;//改变线型里的复合类型
MySlide.Shapes[1].Line.Weight = 1F;//改变线粗细
MySlide.Shapes[1].Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySlide.Shapes[1].Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySlide.Shapes[1].Shadow.Transparency = 0.6F;//控制透明度
MySlide.Shapes[1].Shadow.Size = 100F;//控制大小
MySlide.Shapes[1].Shadow.Blur = 4F;//控制虚化
MySlide.Shapes[1].Shadow.OffsetX = 2.1F;//控制距离;
MySlide.Shapes[1].Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

心得:基本的一些设置,通过英文就可以辨别。不过有些属性的设置是否与预期一致,需要等图形生成后再进一步确认。


4.3 图片

MySlide.Shapes.AddPicture("文件路径", MsoTriState.msoFalse, MsoTriState.msoTrue, 27F, 24F, 665F, 333F);


4.4 表格

Microsoft.Office.Interop.PowerPoint.Table MyTable = null;

MyTable = MySlide.Shapes.AddTable(19, 5, 40F, 100F, 10F, 10F).Table;//创建时规定的宽和高,不是表格最终的大小。

MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Size = 10;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Color.RGB = A + B * 256 + C * 256 * 256;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.NameAscii = "Arial";
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.NameFarEast = "微软雅黑";
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Bold = MsoTriState.msoTrue;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignCenter;
MyTable.Cell(k, j).Shape.TextFrame.VerticalAnchor = MsoVerticalAnchor.msoAnchorMiddle;
MyTable.Cell(k, j).Shape.Fill.ForeColor.RGB = 0;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Text = "C#生成PPT";

这里的设置,几乎和文本框的设置一样。只不过需要先选定Cell。一些个性化的设计,比如合并拆分单元格,边框颜色,按照一般的英文意思都能找到。


4.5 图表

Microsoft.Office.Interop.PowerPoint.Chart MyChart = null;//图表
Microsoft.Office.Interop.PowerPoint.ChartData MyChartData = null;//图表的数据源
Microsoft.Office.Interop.PowerPoint.Axis MyYvalaxis = null;//图表的纵坐标
Microsoft.Office.Interop.PowerPoint.Axis MyXvalaxis = null;//图表的横坐标
Microsoft.Office.Interop.PowerPoint.DataLabels MyDataLabels = null;//图表的数据标签
Microsoft.Office.Interop.PowerPoint.Series MySeries = null;//数据系列
Microsoft.Office.Interop.PowerPoint.ChartGroups MyChartGroups = null;//数据系列-系列选项
Microsoft.Office.Interop.PowerPoint.Points MyPoints = null; //数据系列


MyChart = MySlide.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xlColumnClustered, 35F, 205F, 642F, 227F).Chart;//添加柱形图

MyChartData = MyChart.ChartData;//实例化数据源

Microsoft.Office.Interop.Excel.Workbook MyDataWorkbook_2 = (Microsoft.Office.Interop.Excel.Workbook)MyChartData.Workbook;//由于PPT的数据源是EXCEL工作表,所以此处还要调用EXCEL。

MyDataWorkbook_2.Application.WindowState = XlWindowState.xlMinimized;//不想看那么多窗口,所以最小化了。

Microsoft.Office.Interop.Excel.Worksheet MyDataWorksheet_2 = (Microsoft.Office.Interop.Excel.Worksheet)MyDataWorkbook_2.Worksheets[1];//实例化工作表

Microsoft.Office.Interop.Excel.Range tRange_2 = MyDataWorksheet_2.Cells.get_Range("A1", "C10");//选定数据区域

Microsoft.Office.Interop.Excel.ListObject tbl1_2 = MyDataWorksheet_2.ListObjects[1];
tbl1_2.Resize(tRange_2);

//赋值  
((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range("A2"))).FormulaR1C1 = "全国得分";
((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range("A3"))).FormulaR1C1 = null;
                    
//图表标题
MyChart.ChartTitle.Delete();

//纵轴
MyYvalaxis = (Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlValue, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

MyYvalaxis.MajorGridlines.Delete();//删除主横网络线
MyYvalaxis.MajorUnit = 0.5F;
MyYvalaxis.MinimumScale = 0.0F;
MyYvalaxis.MaximumScale = 1.5F;
MyYvalaxis.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256; ;//坐标轴颜色
MyYvalaxis.Format.Line.Transparency = 1F;//坐标轴是否透明;此句必须先指定颜色,否则无效              
MyYvalaxis.TickLabels.Delete();//删除坐标标签

//横轴
MyXvalaxis = (Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlCategory, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

MyXvalaxis.MajorTickMark = Microsoft.Office.Interop.PowerPoint.XlTickMark.xlTickMarkOutside;//主要刻度线类型
MyXvalaxis.Format.Line.Weight = 0.75F;//线型宽度
MyXvalaxis.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;//线条颜色
MyXvalaxis.TickLabelPosition = Microsoft.Office.Interop.PowerPoint.XlTickLabelPosition.xlTickLabelPositionNone;

//图例
MyChart.Legend.Delete();

//数据标签格式和系列
//系列1
MySeries = (Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(1);
MySeries.HasDataLabels = true;
MySeries.Format.Fill.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.Weight = 1.5F;

MySeries.Format.Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySeries.Format.Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySeries.Format.Shadow.Transparency = 0.6F;//控制透明度
MySeries.Format.Shadow.Size = 100F;//控制大小
MySeries.Format.Shadow.Blur = 4F;//控制虚化
MySeries.Format.Shadow.OffsetX = 2.1F;//控制距离; 
MySeries.Format.Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

//柱子颜色
MyPoints = (Microsoft.Office.Interop.PowerPoint.Points)MySeries.Points();

MyPoints.Item(1).Format.Fill.ForeColor.RGB = A + B * 256 + B * 256 * 256;//系列1中,第1个柱子的颜色

//柱子距离
MyChartGroups = (Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups();
MyChartGroups.Item(1).GapWidth = 50;

//数据标签
MyDataLabels = (Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels();
MyDataLabels.Position = Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd;
MyDataLabels.NumberFormat = "0.0%";
MyDataLabels.Format.TextFrame2.TextRange.Font.Size = 9F;
MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii = "Calibri";
MyDataLabels.Format.TextFrame2.TextRange.Font.Bold = MsoTriState.msoTrue;

//系列2
MySeries = (Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(2);
MySeries.HasDataLabels = true;
MySeries.Format.Fill.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.Weight = 1.5F;

MySeries.Format.Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySeries.Format.Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySeries.Format.Shadow.Transparency = 0.6F;//控制透明度
MySeries.Format.Shadow.Size = 100F;//控制大小
MySeries.Format.Shadow.Blur = 4F;//控制虚化
MySeries.Format.Shadow.OffsetX = 2.1F;//控制距离
MySeries.Format.Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

//柱子距离
MyChartGroups = (Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups();
MyChartGroups.Item(1).GapWidth = 50;

//数据标签
MyDataLabels = (Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels();
MyDataLabels.Position = Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd;
MyDataLabels.NumberFormat = "0.0%";
MyDataLabels.Format.TextFrame2.TextRange.Font.Size = 9F;
MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii = "Calibri";
MyDataLabels.Format.TextFrame2.TextRange.Font.Italic = MsoTriState.msoTrue;

==*****************************==

C# 创建幻灯片

//C# code 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text; 
using System.Windows.Forms;
using Microsoft.Office.Core; 
using PowerPoint=Microsoft.Office.Interop.PowerPoint; 
using Microsoft.Office.Interop.Graph; 
using System.Runtime.InteropServices;
using System.IO; namespace Example { 
    public partial class Form1 : Form 
    { public Form1() 
    { 
        InitializeComponent(); 
    } 
        String MyTemplateFile = Directory.GetCurrentDirectory() + "\\Blends.pot"; //浏览图像文件
        private void button1_Click(object sender, EventArgs e) 
        {
            this.openFileDialog1.Filter="所有图像文件(JPeg, Gif, Bmp, etc.)|*.jpg;*.jpeg; *.gif;*.bmp;*.tif; *.tiff; *.png| JPeg 图像文件 (*.jpg;*.jpeg)|*.jpg;*.jpeg |GIF 图像文件(*.gif)|*.gif |BMP 图像文件(*.bmp)|*.bmp|Tiff 图像文件(*.tif;*.tiff) |*.tif; *.tiff|Png 图像文件(*.png)| *.png |所有文件 (*.*)|*.*"; 
            if(this.openFileDialog1.ShowDialog()==DialogResult.OK) 
            {
                string MyFileName=this.openFileDialog1.FileName; 
                this.pictureBox1.Image=Image.FromFile(MyFileName); 
            } 
        } //创建播放幻灯片 
        private void button2_Click(object sender, EventArgs e)
        { 
            string MyFileName; PowerPoint.ApplicationClass MyApp; 
            PowerPoint.Presentations MyPresSet;
            PowerPoint._Presentation MyPres; 
            PowerPoint.Slides MySlides; 
            PowerPoint._Slide MySlide;
            PowerPoint.SlideShowTransition MySST;
            PowerPoint.SlideShowSettings MySSS; 
            PowerPoint.SlideRange MySldRng;
            PowerPoint.SlideShowWindows MySSWs; 
            bool MyAssistantOn; 
            int i, MyCount; 
            PowerPoint.TextRange MyTextRng; 
            Microsoft.Office.Interop.Graph.Chart MyChart; 
            PowerPoint.Shapes MyShapes; 
            PowerPoint.Shape MyShape; 
            try { 
                MyFileName = this.openFileDialog1.FileName; 
                if (!File.Exists(MyFileName)) 
                {
                    MessageBox.Show("幻灯片模板文件实际不存在!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    return; 
                } 
                MyApp = new PowerPoint.ApplicationClass();
                MyApp.Visible = MsoTriState.msoCTrue; 
                MyPresSet = MyApp.Presentations; 
                MyPres = MyPresSet.Open(MyTemplateFile, MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
                MySlides = MyPres.Slides; 
                
                //创建幻灯片第一页 
                MySlide=MySlides.Add(1,PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
                MyTextRng=MySlide.Shapes[1].TextFrame.TextRange;
                MyTextRng.Text="125555555555555555555552111111"; 
                MyTextRng.Font.Name="宋体"; 
                MyTextRng.Font.Size=48;
                MySlide.Shapes.AddPicture(MyFileName, MsoTriState.msoFalse,MsoTriState.msoTrue,150, 150, 500, 350);
                
                //创建幻灯片第二页
                MySlide=MySlides.Add(2, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);
                MyTextRng=MySlide.Shapes[1].TextFrame.TextRange; MyTextRng.Text="演示绘制饼图";
                MyTextRng.Font.Name="宋体"; 
                MyTextRng.Font.Size= 48; 
                MyChart = (Microsoft.Office.Interop.Graph.Chart)MySlide.Shapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart.8", "", MsoTriState.msoFalse, "", 0, "",
                    MsoTriState.msoFalse).OLEFormat.Object;
                MyChart.ChartType = Microsoft.Office.Interop.Graph.XlChartType.xl3DPie;
                MyChart.Legend.Position = Microsoft.Office.Interop.Graph.XlLegendPosition.xlLegendPositionBottom;
                MyChart.HasTitle= true; MyChart.ChartTitle.Text="经典系列丛书2006年度图书销量";
                
                //创建幻灯片第三页 
                MySlide=MySlides.Add(3, PowerPoint.PpSlideLayout.ppLayoutBlank); 
                MySlide.FollowMasterBackground=MsoTriState.msoFalse; 
                MyShapes=MySlide.Shapes; 
                MyShape=MyShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect29,"经典编程实例集锦", "Impact", 80,MsoTriState.msoFalse, MsoTriState.msoFalse, 50, 200);
                
                //创建幻灯片第四页 
                MySlide=MySlides.Add(4, PowerPoint.PpSlideLayout.ppLayoutBlank);
                MySlide.FollowMasterBackground=MsoTriState.msoFalse; 
                MyShapes=MySlide.Shapes;
                MyShape=MyShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect30,"精彩编程实例集锦","Impact", 60,MsoTriState.msoFalse, MsoTriState.msoFalse, 150, 10);
                MyShape=MyShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect29,"罗斌编著", "Impact", 80, MsoTriState.msoFalse, MsoTriState.msoFalse, 350, 250);
                
                //创建幻灯片第五页 
                MySlide=MySlides.Add(5, PowerPoint.PpSlideLayout.ppLayoutBlank); 
                MySlide.FollowMasterBackground=MsoTriState.msoFalse; 
                MyShapes=MySlide.Shapes; 
                MyShape=MyShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect27,"The End", "Impact", 96, MsoTriState.msoFalse, MsoTriState.msoFalse, 230, 200);
                MyCount=(int)MySlides.Count; int[] MySlideIdx=new int[MyCount]; 
                for (i = 0; i < MyCount; i++) 
                { 
                    MySlideIdx[i]=i+1;
                } 
                MySldRng = MySlides.Range(MySlideIdx); 
                MySST=MySldRng.SlideShowTransition;
                MySST.AdvanceOnTime=MsoTriState.msoTrue; 
                MySST.AdvanceTime=1;
                MySST.EntryEffect=PowerPoint.PpEntryEffect.ppEffectBoxOut;
                MyAssistantOn=MyApp.Assistant.On; 
                MyApp.Assistant.On=false; 
                MySSS= MyPres.SlideShowSettings; 
                MySSS.StartingSlide=1; 
                MySSS.EndingSlide=1; 
                MySSS.Run();
                MySSWs= MyApp.SlideShowWindows;
                while (MySSWs.Count >= 1) 
                { 
                    System.Threading.Thread.Sleep(2000);
                } 
                if (MyAssistantOn)
                { 
                    MyApp.Assistant.On = true;
                    MyApp.Assistant.Visible = false;
                } 
                MyPres.Close();
                MyApp.Quit();
            } 
            catch (Exception MyEx) 
            {
                MessageBox.Show(MyEx.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            } 
        } 
        private void Form1_Load(object sender, EventArgs e) 
        {
        } 
    } 
}


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
    }
}
==************************=========

 

 

 

posted @ 2019-07-30 10:42  Vanling  阅读(1670)  评论(0编辑  收藏  举报