OpenXml 2.0 SDK向PowerPoint 2010文件中插入一个Slide.
实现环境:Visual Studio 2010, PowerPoint 2010,OpenXml SDK 2.0.50727
using System.Windows.Forms; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using P = DocumentFormat.OpenXml.Presentation; using DocumentFormat.OpenXml.Drawing; namespace OpenXmlEmptyPresentation { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Presention File (.pptx)|*.pptx"; dialog.ShowDialog(); string FilePath = dialog.FileName; if (FilePath.Length > 0) { using (PresentationDocument objPresentationDocument = PresentationDocument.Open(FilePath, true)) { int Position = 1; PresentationPart objPresentationPart = objPresentationDocument.PresentationPart; SlidePart objSlidePart = objPresentationPart.AddNewPart<SlidePart>(); P.Slide objSlide = new P.Slide(new P.CommonSlideData (new P.ShapeTree())); uint uiDrawingObjectId = 1; P.NonVisualGroupShapeProperties objNonVisualGroupShapeProperties = new P.NonVisualGroupShapeProperties(); P.NonVisualDrawingProperties objNonVisualDrawingProperties = new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" }; P.NonVisualGroupShapeDrawingProperties objNonVisualGroupShapeDrawingProperties = new P.NonVisualGroupShapeDrawingProperties(); P.ApplicationNonVisualDrawingProperties objApplicationNonVisualDrawingProperties = new P.ApplicationNonVisualDrawingProperties(); objNonVisualGroupShapeProperties.Append(objNonVisualDrawingProperties); objNonVisualGroupShapeProperties.Append(objNonVisualGroupShapeDrawingProperties); objNonVisualGroupShapeProperties.Append(objApplicationNonVisualDrawingProperties); objSlide.CommonSlideData.ShapeTree.Append(objNonVisualGroupShapeProperties); objSlide.CommonSlideData.ShapeTree.AppendChild(new P.GroupShapeProperties()); TransformGroup objTransformGroup = new TransformGroup(); Offset objOffset = new Offset() { X = 0L, Y = 0L }; Extents objExtents = new Extents() { Cx = 0L, Cy = 0L }; ChildOffset objChildOffset = new ChildOffset() { X = 0L, Y = 0L }; ChildExtents objChildExtents = new ChildExtents() { Cx = 0L, Cy = 0L }; objTransformGroup.Append(objOffset); objTransformGroup.Append(objExtents); objTransformGroup.Append(objChildOffset); objTransformGroup.Append(objChildExtents); objSlide.CommonSlideData.ShapeTree.GroupShapeProperties.Append(objTransformGroup); P.Shape objShape = new P.Shape(); uiDrawingObjectId++; //NonVisualShapeProperties,NonVisualDrawingProperties,NonVisualShapeDrawingProperties有歧义,注意空间名的区分。 objShape.NonVisualShapeProperties = new P.NonVisualShapeProperties(new P.NonVisualDrawingProperties() { Id = uiDrawingObjectId, Name = "Title" }, new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),new P.ApplicationNonVisualDrawingProperties(new P.PlaceholderShape(){Type = P.PlaceholderValues.Title})); objShape.ShapeProperties = new P.ShapeProperties(); objShape.AppendChild(new P.TextBody(new BodyProperties(),new ListStyle(),new Paragraph(new Run(new Text() { Text = "Hello World!" })))); objSlide.CommonSlideData.ShapeTree.Append(objShape); P.ColorMapOverride objColorMapOverride = new P.ColorMapOverride(); MasterColorMapping objMasterColorMapping = new MasterColorMapping(); objColorMapOverride.Append(objMasterColorMapping); objSlide.ColorMapOverride = objColorMapOverride; objSlide.Save(objSlidePart); uint maxSlideId = 1; P.SlideId prevSlideId = null; foreach (P.SlideId objSlideId in objPresentationPart.Presentation.SlideIdList.ChildElements) { if (objSlideId.Id > maxSlideId) { maxSlideId = objSlideId.Id; } Position--; if (Position == 0) { prevSlideId = objSlideId; } } maxSlideId++; SlidePart objLastSlidePart; if (prevSlideId != null) { objLastSlidePart = (SlidePart)objPresentationPart.GetPartById(prevSlideId.RelationshipId); } else { objLastSlidePart = (SlidePart)objPresentationPart.GetPartById(((P.SlideId)(objPresentationPart.Presentation.SlideIdList.ChildElements[0])).RelationshipId); } if (null != objLastSlidePart.SlideLayoutPart) { objSlidePart.AddPart<SlideLayoutPart>(objLastSlidePart.SlideLayoutPart); } P.SlideId newSlideId = objPresentationPart.Presentation.SlideIdList.InsertAfter<P.SlideId>(new P.SlideId(), prevSlideId); newSlideId.Id = maxSlideId; newSlideId.RelationshipId = objPresentationPart.GetIdOfPart(objSlidePart); objPresentationPart.Presentation.Save(); } } } } }
相关资源下载:http://download.csdn.net/detail/tx_officedev/3892557
征诛志异,三让两家王朝;功同开辟,一桮万古江南。