2016-05-03 2 views
1

У меня есть приложение, которое идентифицирует некоторые слайды с некоторыми критериями и хочет скопировать эти слайды в один файл PPTX. У меня есть код openxml для слайдов для копирования, и он отлично работает, но занимает слишком много времени, когда размер выходного файла увеличивается. Поэтому я решил перебраться в режим общения. Следующий код предназначен для копирования слайдов.Как скопировать определенные слайды из группы PPTS?

using Microsoft.Office.Core; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using PowerPoint = Microsoft.Office.Interop.PowerPoint; 


namespace CloneSlide 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       PowerPoint.Application app = new PowerPoint.Application(); 
       PowerPoint.Presentation currPresentation = null; 
       PowerPoint.Presentation currPresentationop = null; 

       string inputFileName = @"C:\Users\user\Desktop\Blannkdocs\ppt\Input.pptx"; 
       //PowerPoint.Presentations presentations = app.Presentations; 
       //var readOnly = Microsoft.Office.Core.MsoTriState.msoTrue; 
       //var untitled = Microsoft.Office.Core.MsoTriState.msoTrue; 
       //var withwindow = Microsoft.Office.Core.MsoTriState.msoFalse; 
       //string chkfileforpassword = inputFileName + "::" + "\"\"" + "::" + "\"\""; 
       //currPresentation = presentations.Open(chkfileforpassword, readOnly, untitled, withwindow); 
       //currPresentation.Slides[1].Copy(); 

       string outputFileName = @"C:\Users\user\Desktop\Blannkdocs\ppt\Presentation1.pptx"; 
       PowerPoint.Presentations presentationsop = app.Presentations; 
       currPresentationop = presentationsop.Open(outputFileName, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse); 
       //currPresentationop.Slides.Paste(1); 
       currPresentationop.Slides.InsertFromFile(inputFileName, 1, 1, 1); 
       System.Threading.Thread.Sleep(4000); 
       currPresentationop.Save(); 
       app.Quit(); 
      } 
      catch (Exception exp) 
      { 
       Console.WriteLine(exp); 
      } 
      Console.WriteLine("Execution Complete"); 
      Console.ReadLine(); 
     } 
    } 
} 

Я уже пробовал с

 //currPresentationop.Slides.Paste(1); 
     currPresentationop.Slides.InsertFromFile(inputFileName, 1, 1, 1); 

как в содержании дела копируются, а фон и форматирование слайдов исчезали на выходе. Есть что-то, что я пропустил, чтобы добавить, когда справлялся.

+1

Существует метод PublishSlides, который может помочь, но я не нашел его очень надежным. Простейшим может быть сохранение новой копии презентации, а затем удаление любых слайдов, которые вы не хотите включать (всегда с обратной стороны). –

+0

Вы также можете просто применить исходный проект на вкладках, которые вы вставляете. –

ответ

1
using PPT = Microsoft.Office.Interop.PowerPoint; 

     public void Main() 
     { 
      PPT.Application app = new PPT.Application(); 
      app.Visible = MsoTriState.msoCTrue; 
      PPT.Presentation ppt1 = app.Presentations.Open(@"C:\Presentation1.pptx"); 
      ppt1.Slides[1].Copy(); 

      PPT.Presentation ppt2 = app.Presentations.Open(@"C:\Presentation2.pptx"); 
      ppt2.Windows[1].View.GotoSlide(1); 

      app.CommandBars.ExecuteMso("PasteSourceFormatting"); 

     } 

Вы можете попробовать этот.