删除幻灯片
Contents
[
Hide
]
OpenXML SDK
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "删除幻灯片.pptx";
DeleteSlide(FileName, 1);
// 获取演示文稿对象并将其传递给下一个 DeleteSlide 方法。
public static void DeleteSlide(string presentationFile, int slideIndex)
{
// 打开源文档以进行读/写。
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
// 将源文档和要删除的幻灯片的索引传递给下一个 DeleteSlide 方法。
DeleteSlide(presentationDocument, slideIndex);
}
}
// 从演示文稿中删除指定幻灯片。
public static void DeleteSlide(PresentationDocument presentationDocument, int slideIndex)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
// 使用 CountSlides 示例获取演示文稿中的幻灯片数量。
int slidesCount = CountSlides(presentationDocument);
if (slideIndex < 0 || slideIndex >= slidesCount)
{
throw new ArgumentOutOfRangeException("slideIndex");
}
// 从演示文稿文档中获取演示文稿部分。
PresentationPart presentationPart = presentationDocument.PresentationPart;
// 从演示文稿部分获取演示文稿。
Presentation presentation = presentationPart.Presentation;
// 获取演示文稿中幻灯片 ID 的列表。
SlideIdList slideIdList = presentation.SlideIdList;
// 获取指定幻灯片的幻灯片 ID
SlideId slideId = slideIdList.ChildElements[slideIndex] as SlideId;
// 获取幻灯片的关系 ID。
string slideRelId = slideId.RelationshipId;
// 从幻灯片列表中移除幻灯片。
slideIdList.RemoveChild(slideId);
//
// 从所有自定义放映中移除对幻灯片的引用。
if (presentation.CustomShowList != null)
{
// 遍历自定义放映列表。
foreach (var customShow in presentation.CustomShowList.Elements<CustomShow>())
{
if (customShow.SlideList != null)
{
// 声明一个幻灯片列表条目的链接列表。
LinkedList<SlideListEntry> slideListEntries = new LinkedList<SlideListEntry>();
foreach (SlideListEntry slideListEntry in customShow.SlideList.Elements())
{
// 查找要从自定义放映中移除的幻灯片引用。
if (slideListEntry.Id != null && slideListEntry.Id == slideRelId)
{
slideListEntries.AddLast(slideListEntry);
}
}
// 从自定义放映中移除所有对幻灯片的引用。
foreach (SlideListEntry slideListEntry in slideListEntries)
{
customShow.SlideList.RemoveChild(slideListEntry);
}
}
}
}
// 保存修改后的演示文稿。
presentation.Save();
// 获取指定幻灯片的幻灯片部分。
SlidePart slidePart = presentationPart.GetPartById(slideRelId) as SlidePart;
// 移除幻灯片部分。
presentationPart.DeletePart(slidePart);
}
// 获取演示文稿对象并将其传递给下一个 CountSlides 方法。
public static int CountSlides(string presentationFile)
{
// 以只读模式打开演示文稿。
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, false))
{
// 将演示文稿传递给下一个 CountSlide 方法
// 并返回幻灯片数量。
return CountSlides(presentationDocument);
}
}
// 计算演示文稿中的幻灯片。
public static int CountSlides(PresentationDocument presentationDocument)
{
// 检查文档对象是否为 null。
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
int slidesCount = 0;
// 获取文档的演示文稿部分。
PresentationPart presentationPart = presentationDocument.PresentationPart;
// 从 SlideParts 获取幻灯片数量。
if (presentationPart != null)
{
slidesCount = presentationPart.SlideParts.Count();
}
// 将幻灯片数量返回给上一个方法。
return slidesCount;
}
Aspose.Slides
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "删除幻灯片.pptx";
DeleteSlide(FileName, 1);
public static void DeleteSlide(string presentationFile, int slideIndex)
{
//实例化一个表示 PPTX 文件的 PresentationEx 对象
using (Presentation pres = new Presentation(presentationFile))
{
//通过索引访问幻灯片
ISlide slide = pres.Slides[slideIndex];
//通过引用移除幻灯片
pres.Slides.Remove(slide);
//将演示文稿写入 PPTX 文件
pres.Save(presentationFile,Aspose.Slides.Export.SaveFormat.Pptx);
}
}