public List <IFileItem> AppendSlides(List <PPT.Slide> srcSlides) { PPT.Application ppt = null; PPT.Presentations pres = null; PPT.Presentation pptPresentation = null; try { ppt = new PPT.Application(); pres = ppt.Presentations; pptPresentation = pres.Open(FullPath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue); PPT.DocumentWindow wnd = pptPresentation.Windows[1]; //wnd.Height = 200; //wnd.Top = -200; wnd.WindowState = PPT.PpWindowState.ppWindowMinimized; wnd = null; #region Alt. slower approach by copy ppt and insert slides from file //Copy //string tempFile = @"c:\WRK\Temp.pptx"; //ppt.ActivePresentation.SaveCopyAs(tempFile, PPT.PpSaveAsFileType.ppSaveAsDefault, Microsoft.Office.Core.MsoTriState.msoTrue); //PPT.Presentation tempPPT = ppt.Presentations.Open(tempFile,MsoTriState.msoFalse,MsoTriState.msoFalse, MsoTriState.msoFalse); //List<string> slideNames = slides.Select(slide => slide.Name).ToList(); //var v = from PPT.Slide sl in tempPPT.Slides where !slideNames.Contains(sl.Name) select sl; //foreach(PPT.Slide s in v) //{ // s.Delete(); //} //tempPPT.Save(); //tempPPT.Close(); //gallery.Slides.InsertFromFile(tempFile, gallery.Slides.Count); #endregion PPT.Slides gSlides = pptPresentation.Slides; int startIndex = gSlides.Count + 1; foreach (PPT.Slide slide in srcSlides) { slide.Copy(); gSlides.Paste(); } List <IFileItem> newItems = new List <IFileItem>(); newItems = fileIndex.UpdateIndex(pptPresentation, startIndex); return(newItems); } finally { if (pptPresentation != null) { pptPresentation.Save(); pptPresentation.Close(); } pptPresentation.ReleaseCOM(); pptPresentation = null; pres.ReleaseCOM(); pres = null; ppt.ReleaseCOM(); ppt = null; } }