• .net导出为powerpoint的一些参考代码


    以下是网上找到的代码:

    using   Microsoft.Office.Core;   
      
    using   PowerPoint   =   Microsoft.Office.Interop.PowerPoint;   
      
    using   Graph   =   Microsoft.Office.Interop.Graph;   
      
    using   System.Runtime.InteropServices;   

      
    private   void   button1_Click(object   sender,   System.EventArgs   e)   
      {   
      ShowPresentation();   
      GC.Collect();   
      }     

      
    private   void   ShowPresentation()   
      {   
      String   strTemplate,   strPic;   
      strTemplate   
    =     
          
    "C:\\Program   Files\\Microsoft   Office\\Templates\\Presentation   Designs\\Blends.pot";   
      strPic   
    =   "C:\\Windows\\Blue   Lace   16.bmp";   
      
    bool   bAssistantOn;   

      PowerPoint.Application   objApp;   
      PowerPoint.Presentations   objPresSet;   
      PowerPoint._Presentation   objPres;   
      PowerPoint.Slides   objSlides;   
      PowerPoint._Slide   objSlide;   
      PowerPoint.TextRange   objTextRng;   
      PowerPoint.Shapes   objShapes;   
      PowerPoint.Shape   objShape;   
      PowerPoint.SlideShowWindows   objSSWs;   
      PowerPoint.SlideShowTransition   objSST;   
      PowerPoint.SlideShowSettings   objSSS;   
      PowerPoint.SlideRange   objSldRng;   
      Graph.Chart   objChart;   

      
    //Create   a   new   presentation   based   on   a   template.   
      objApp   =   new   PowerPoint.Application();   
      objApp.Visible   
    =   MsoTriState.msoTrue;   
      objPresSet   
    =   objApp.Presentations;   
      objPres   
    =   objPresSet.Open(strTemplate,     
      MsoTriState.msoFalse,   MsoTriState.msoTrue,   MsoTriState.msoTrue);   
      objSlides   
    =   objPres.Slides;   

      
    //Build   Slide   #1:   
      
    //Add   text   to   the   slide,   change   the   font   and   insert/position   a     
      
    //picture   on   the   first   slide.   
      objSlide   =   objSlides.Add(1,PowerPoint.PpSlideLayout.ppLayoutTitleOnly);   
      objTextRng   
    =   objSlide.Shapes[1].TextFrame.TextRange;   
      objTextRng.Text   
    =   "My   Sample   Presentation";   
      objTextRng.Font.Name   
    =   "Comic   Sans   MS";   
      objTextRng.Font.Size   
    =   48;   
      objSlide.Shapes.AddPicture(strPic,   MsoTriState.msoFalse,   MsoTriState.msoTrue,   
      
    150,   150,   500,   350);   

      
    //Build   Slide   #2:   
      
    //Add   text   to   the   slide   title,   format   the   text.   Also   add   a   chart   to   the   
      
    //slide   and   change   the   chart   type   to   a   3D   pie   chart.   
      objSlide   =   objSlides.Add(2,   PowerPoint.PpSlideLayout.ppLayoutTitleOnly);   
      objTextRng   
    =   objSlide.Shapes[1].TextFrame.TextRange;   
      objTextRng.Text   
    =   "My   Chart";   
      objTextRng.Font.Name   
    =   "Comic   Sans   MS";   
      objTextRng.Font.Size   
    =   48;   
      objChart   
    =   (Graph.Chart)   objSlide.Shapes.AddOLEObject(150,150,480,320,       
      
    "MSGraph.Chart.8",   "",   MsoTriState.msoFalse,   "",   0,   "",     
      MsoTriState.msoFalse).OLEFormat.Object;   
      objChart.ChartType   
    =   Graph.XlChartType.xl3DPie;   
      objChart.Legend.Position
    =Graph.XlLegendPosition.xlLegendPositionBottom;   
      objChart.HasTitle   
    =   true;   
      objChart.ChartTitle.Text   
    =   "Here   it   is";   

      
    //Build   Slide   #3:   
      
    //Change   the   background   color   of   this   slide   only.   Add   a   text   effect   to   the   slide   
      
    //and   apply   various   color   schemes   and   shadows   to   the   text   effect.   
      objSlide   =   objSlides.Add(3,   PowerPoint.PpSlideLayout.ppLayoutBlank);   
      objSlide.FollowMasterBackground   
    =   MsoTriState.msoFalse;   
      objShapes   
    =   objSlide.Shapes;   
      objShape   
    =   objShapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect27,   
          
    "The   End",   "Impact",   96,   MsoTriState.msoFalse,   MsoTriState.msoFalse,   230,   200);   

      
    //Modify   the   slide   show   transition   settings   for   all   3   slides   in   
      
    //the   presentation.   
      int[]   SlideIdx   =   new   int[3];   
      
    for(int   i=0;i<3;i++)   SlideIdx[i]=i+1;   
      objSldRng   
    =   objSlides.Range(SlideIdx);   
      objSST   
    =   objSldRng.SlideShowTransition;   
      objSST.AdvanceOnTime   
    =   MsoTriState.msoTrue;   
      objSST.AdvanceTime   
    =   3;   
      objSST.EntryEffect   
    =   PowerPoint.PpEntryEffect.ppEffectBoxOut;   

      
    //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   =   objPres.SlideShowSettings;   
      objSSS.StartingSlide   
    =   1;   
      objSSS.EndingSlide   
    =   3;   
      objSSS.Run();   

      
    //Wait   for   the   slide   show   to   end.   
      objSSWs   =   objApp.SlideShowWindows;   
      
    while(objSSWs.Count>=1)   System.Threading.Thread.Sleep(100);   

      
    //Reenable   Office   Assisant,   if   it   was   on:   
      if(bAssistantOn)   
      {   
      objApp.Assistant.On   
    =   true;   
      objApp.Assistant.Visible   
    =   false;   
      }   

      
    //Close   the   presentation   without   saving   changes   and   quit   PowerPoint.   
      objPres.Close();   
      objApp.Quit();   
      }


    这是网上找的源码,基本上包括了一些基本的操作。很多属性和事件最好对照找VBA手册来看,当然一看就能看懂那就没必要对照着看了。ppt的VBA手
    册网上还是很多下载的,这里就不放了。以下是多一些属性的中文注释,只是为了方便需要的人,不用再去查基本的属性意思。
    //以下注释都是对照VBA手册翻译而来掺杂了个人的理解,功能应该有一点出入,实际开发要自己实验一下。

    //代表整个 Microsoft PowerPoint 应用程序。Application 对象包括: 
                
    //1.应用程序范围内的设置和选项(例如,当前打印机的名称) 
                
    //2.用于返回顶层对象的属性,例如 ActivePresentation、Windows 等
                PowerPoint.Application

                
    //PowerPoint 中所有 Presentation 对象的集合。
                
    //每个 Presentation 对象代表 PowerPoint 中当前打开的一个演示文稿。
                PowerPoint.Presentations

                
    //代表一个 PowerPoint 演示文稿。
                
    //Presentation 对象属于 Presentations 集合中的成员。
                
    //Presentations 集合中包含所有的 Presentation 对象,它们分别代表 PowerPoint 中所有打开的演示文稿。
                PowerPoint._Presentation  


                
    //在指定演示文稿中所有 Slide 对象的集合。
                
    //即一个幻灯片对象
                PowerPoint.Slides

                
    //代表一个幻灯片。Slides 集合包含演示文稿中的所有 Slide 对象            
                ///注意  如果试图返回对单张幻灯片的引用却得到了一个 SlideRange 对象时,请不要奇怪。
                
    ///单张的幻灯片既可以由 Slide 对象返回也可以由只包含一个对象的 SlideRange 集合返回,
                
    ///这取决于返回该幻灯片引用的方式。例如,使用 Add 方法创建并返回对幻灯片的引用,
                
    ///幻灯片由 Slide 对象表示。然而,如果使用 Duplicate 方法创建并返回对幻灯片的引用,
                
    ///则幻灯片由包含单张幻灯片的 SlideRange 集合表示。
                
    ///因为应用于 Slide 对象的所有属性和方法也可应用于包含单张幻灯片的 SlideRange 集合,
                
    ///所以可对返回的幻灯片进行相同的操作,而不管它是由 Slide 对象还是 SlideRange 集合表示。
                PowerPoint._Slide 


                
    //包含附加到形状上的文本,以及用于操作文本的属性和方法。
                PowerPoint.TextRange 

                
    //指定幻灯片中所有 Shape 对象的集合。每个 Shape 对象代表绘图层中的一个对象,例如自选图形、任意多边形、OLE 对象或图片。
                PowerPoint.Shapes 

                
    //代表绘图层中的对象,例如自选图形、任意多边形、OLE 对象或图片。
                PowerPoint.Shape 

                
    //代表运行幻灯片放映的窗口。
                PowerPoint.SlideShowWindows 

                
    //包含幻灯片放映过程中指定幻灯片切换方式的信息。
                PowerPoint.SlideShowTransition 

                
    //代表演示文稿的幻灯片放映设置。
                PowerPoint.SlideShowSettings

                
    //代表备注页或幻灯片范围的集合,该范围是一组幻灯片,少则仅包含一个,多则包含演示文稿中的所有幻灯片。
                
    //要构造幻灯片范围,可通过从演示文稿中的所有幻灯片或已选择的幻灯片中选择所需的任意幻灯片。
                
    //例如,可以构造一个 SlideRange 集合,它包含演示文稿中的前三张幻灯片、演示文稿中所有已选择的幻灯片或演示文稿中的所有标             题幻灯片。
                PowerPoint.SlideRange 

    然后是一些个人开发中遇到的问题,也列出来供参考
        首先是幻灯片的创建方式,例子里的创建方式是从模板创建,此方式只能创建2003自带的模板幻灯片,如果想像2007那样自定义复杂的模板,
    2003的模板是无法满足的。2005里的PPT类是microsoft powerpoint 11.0 object libraray。代码中的
    objSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);PowerPoint.PpSlideLayout的属性包括
            ppLayoutMixed = -2,
            ppLayoutTitle = 1,
            ppLayoutText = 2,
            ppLayoutTwoColumnText = 3,
            ppLayoutTable = 4,
            ppLayoutTextAndChart = 5,
            ppLayoutChartAndText = 6,
            ppLayoutOrgchart = 7,
            ppLayoutChart = 8,
            ppLayoutTextAndClipart = 9,
            ppLayoutClipartAndText = 10,
            ppLayoutTitleOnly = 11,
            ppLayoutBlank = 12,
            ppLayoutTextAndObject = 13,
            ppLayoutObjectAndText = 14,
            ppLayoutLargeObject = 15,
            ppLayoutObject = 16,
            ppLayoutTextAndMediaClip = 17,
            ppLayoutMediaClipAndText = 18,
            ppLayoutObjectOverText = 19,
            ppLayoutTextOverObject = 20,
            ppLayoutTextAndTwoObjects = 21,
            ppLayoutTwoObjectsAndText = 22,
            ppLayoutTwoObjectsOverText = 23,
            ppLayoutFourObjects = 24,
            ppLayoutVerticalText = 25,
            ppLayoutClipArtAndVerticalText = 26,
            ppLayoutVerticalTitleAndText = 27,
            ppLayoutVerticalTitleAndTextOverChart = 28,
            ppLayoutTwoObjects = 29,
            ppLayoutObjectAndTwoObjects = 30,
            ppLayoutTwoObjectsAndObject = 31,
    和2003可应用的版式正好31个相符。例子中的方法就是基于模板的方式创建幻灯片。
        因为要做一个复杂模板的DEMO,所以不能用例子中的方式。
        Slides.InsertFromFile("d:\\work\\mode.ppt", 1, 1, 1);
        InsertFromFile方法可从指定演示文稿中的指定幻灯片创建新幻灯片,新幻灯片就相当于目标幻灯片的拷贝,暂时这么理解。这里就叫他为模板
    幻灯片吧,模板幻灯片可以按自己的要求做,DEMO中的幻灯片是预留一块图片区域,然后再指定区域插入相应的文本预留区域,用于显示要显示的属
    性。
        说着说着再次确认自己语言表达能力确实不行,还是放上源码大家自己看吧。然后再有几点要说的是,
    objPres.SaveAs("d:\\work\\asbs.ppt", PpSaveAsFileType.ppSaveAsPresentation, MsoTriState.msoFalse);
    的最后一个参数最好得指定为MsoTriState.msoFalse,如果为TRUE的话在文稿保存的时候会顺带一起保存字体,然后文件会很大,保存速度也很慢。
    普通模板的时候看不出来差异,但是如果自已做的复杂模板的话,就会在保存的时候卡死,大家可以试试。
        DEMO稍后放上,代码比较杂乱,紧供参考一些基本的PPT操作。
        如有错误的地方请一定指正出来,希望不要误导了有需要的人。还有,DEMO里没有对图片进行加链接的操作,正在测试中。    
          

     DEMO:PPT最后的空间用完了……
    DEMO的使用只要在D盘下创建一个“WORK”目录,然后把DEMO解压到里面就可以用了,源码是VS2005下开发的。后面就大家自己琢磨那些属性的使用吧。

    图片加链接已解决!

  • 相关阅读:
    编码上的小改进
    自定义HttpFilter模块完善
    Log4Net日志分类和自动维护
    也来写写基于单表的Orm(使用Dapper)
    要知道的DbProviderFactory
    仿Orm 自动生成分页SQL
    【问题帖】压缩图片大小至指定Kb以下
    [leetcode]Find Minimum in Rotated Sorted Array
    [leetcode]Maximum Product Subarray
    join
  • 原文地址:https://www.cnblogs.com/ruanbl/p/1344758.html
Copyright © 2020-2023  润新知