移动幻灯片到新位置

OpenXML SDK


 string FilePath = @"..\..\..\..\Sample Files\";

string FileName = FilePath + "Move a slide to a new position.pptx";

MoveSlide(FileName, 1, 2);

// 计算演示文稿中的幻灯片数量。

public static int CountSlides(string presentationFile)

{

    // 以只读方式打开演示文稿。

    using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, false))

    {

        // 将演示文稿传递给下一个 CountSlides 方法

        // 并返回幻灯片数量。

        return CountSlides(presentationDocument);

    }

}

// 计算演示文稿中的幻灯片。

public static int CountSlides(PresentationDocument presentationDocument)

{

    // 检查文档对象是否为空。

    if (presentationDocument == null)

    {

        throw new ArgumentNullException("presentationDocument");

    }

    int slidesCount = 0;

    // 获取文档的演示文稿部分。

    PresentationPart presentationPart = presentationDocument.PresentationPart;

    // 从 SlideParts 中获取幻灯片数量。

    if (presentationPart != null)

    {

        slidesCount = presentationPart.SlideParts.Count();

    }

    // 返回幻灯片数量给上一个方法。

    return slidesCount;

}

// 将幻灯片移动到演示文稿中幻灯片顺序的不同位置。

public static void MoveSlide(string presentationFile, int from, int to)

{

    using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))

    {

        MoveSlide(presentationDocument, from, to);

    }

}

// 将幻灯片移动到演示文稿中幻灯片顺序的不同位置。

public static void MoveSlide(PresentationDocument presentationDocument, int from, int to)

{

    if (presentationDocument == null)

    {

        throw new ArgumentNullException("presentationDocument");

    }

    // 调用 CountSlides 方法以获取演示文稿中的幻灯片数量。

    int slidesCount = CountSlides(presentationDocument);

    // 验证 from 和 to 位置均在范围内且不相同。

    if (from < 0 || from >= slidesCount)

    {

        throw new ArgumentOutOfRangeException("from");

    }

    if (to < 0 || from >= slidesCount || to == from)

    {

        throw new ArgumentOutOfRangeException("to");

    }

    // 从演示文稿文档中获取演示文稿部分。

    PresentationPart presentationPart = presentationDocument.PresentationPart;

    // 幻灯片数量不为零,因此演示文稿必须包含幻灯片。            	

    Presentation presentation = presentationPart.Presentation;

    SlideIdList slideIdList = presentation.SlideIdList;

    // 获取源幻灯片的幻灯片 ID。

    SlideId sourceSlide = slideIdList.ChildElements[from] as SlideId;

    SlideId targetSlide = null;

    // 确定移动源幻灯片后目标幻灯片的位置。

    if (to == 0)

    {

        targetSlide = null;

    }

    if (from < to)

    {

        targetSlide = slideIdList.ChildElements[to] as SlideId;

    }

    else

    {

        targetSlide = slideIdList.ChildElements[to - 1] as SlideId;

    }

    // 从当前 position 中移除源幻灯片。

    sourceSlide.Remove();

    // 在目标幻灯片之后插入源幻灯片到新位置。

    slideIdList.InsertAfter(sourceSlide, targetSlide);

    // 保存修改后的演示文稿。

    presentation.Save();

} 

Aspose.Slides


 string FilePath = @"..\..\..\..\Sample Files\";

string FileName = FilePath + "Move a slide to a new position.pptx";

MoveSlide(FileName, 1, 2);

// 将幻灯片移动到演示文稿中幻灯片顺序的不同位置。

public static void MoveSlide(string presentationFile, int from, int to)

{

    //实例化 PresentationEx 类以加载源 PPTX 文件

    using (Presentation pres = new Presentation(presentationFile))

    {

        // 获取要更改位置的幻灯片

        ISlide sld = pres.Slides[from];

        ISlide sld2 = pres.Slides[to];

        // 设置幻灯片的新位置

        sld2.SlideNumber = from;

        sld.SlideNumber = to;

        // 将 PPTX 写入磁盘

        pres.Save(presentationFile,Aspose.Slides.Export.SaveFormat.Pptx);

    }

}

下载示例代码