OpenXml 2.0 SDK向PowerPoint 2010文件中插入一个Slide.

63 篇文章 0 订阅
26 篇文章 0 订阅

实现环境: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值