刪除投影片
Contents
[
Hide
]
OpenXML SDK
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Delete a slide.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");
}
// 從簡報文件取得 presentation 部分。
PresentationPart presentationPart = presentationDocument.PresentationPart;
// 從 presentation 部分取得簡報本體。
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;
// 取得文件的 presentation 部分。
PresentationPart presentationPart = presentationDocument.PresentationPart;
// 從 SlideParts 取得投影片數量。
if (presentationPart != null)
{
slidesCount = presentationPart.SlideParts.Count();
}
// 回傳投影片數量給前一個方法。
return slidesCount;
}
Aspose.Slides
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Delete a slide.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);
}
}