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

posted @ 2011-12-07 17:35  许阳 无锡  阅读(353)  评论(0编辑  收藏  举报