2016-05-03 7 views
1

Ich habe eine Anwendung, die einige Folien mit einigen Kriterien identifizieren und diese Folien in eine einzige PPTX-Datei kopieren möchte. Ich habe OpenXML-Code für Kopierfolien und es funktioniert perfekt, aber zu viel Zeit, wenn die Größe der Ausgabedatei zunimmt. Also entschied ich mich für die Coping auf Interop zu wechseln. Der folgende Code dient zum Bearbeiten der Folie.Wie kopiere ich bestimmte Folien aus einer Gruppe von 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(); 
     } 
    } 
} 

Ich habe bereits versucht, mit

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

sowohl im Fall Inhalt kopiert, aber der Hintergrund und die Formatierung der Folien wurden in der Ausgabe verschwunden. Gibt es etwas, das ich bei der Bewältigung vermisst habe?

+1

Es gibt eine PublishSlides-Methode, die helfen könnte, aber ich habe nicht gefunden, dass sie sehr zuverlässig ist. Am einfachsten ist es, eine neue Kopie der Präsentation zu speichern und dann alle Folien zu löschen, die Sie nicht einfügen möchten (immer von hinten nach vorne). –

+0

Sie könnten auch einfach das Quelldesign auf die Folien anwenden, die Sie einfügen. –

Antwort

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"); 

     } 

Sie können dieses versuchen.

Verwandte Themen