您的位置:首页 > 编程语言

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

2008-12-01 11:08 295 查看
以下是网上找到的代码:

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下开发的。后面就大家自己琢磨那些属性的使用吧。

图片加链接已解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: