2017-06-20 4 views
0

Ich stecke derzeit auf ein Problem, das ich nicht lösen kann. Wenn wir ein Arbeitsblatt in pptx haben, erhalten wir COM-Exceptions beim Speichern. Laut unseren Tests ist es, weil die Präsentation noch nicht vollständig geladen ist, wenn wir versuchen, eine SaveAs() oder SaveCopyAs() zu tun.Powerpoint Interop: Wie erkennt man, wenn eine Präsentation vollständig geladen ist

Wir haben jedoch festgestellt, dass es kein Ereignis oder eine Eigenschaft in Presentation-Object oder Application-Object gibt, die anzeigen könnten, wenn die Präsentation vollständig geladen ist. Auch AddIn-Express (ein Plugin, das wir verwenden) hat kein Ereignis damit verbunden.

Gibt es Art und Weise, wie wir testen können, wenn alle Formen/Inhalt in einer Präsentation, ohne auf amateuristic Code vollständig geladen sind unten wie:

Aktuelle Schmutzige Fix: (Dieser Code wirklich meine Augen weh tut)

bool hasNotBeenSaved = true; 
while (hasNotBeenSaved) { 
    try { 
     PowerPointApp.ActivePresentation.SaveAs(filePath); 
     hasNotBeenSaved = false; 
    } catch (Exception ex) { 
     log("AddInModule - PowerpointPanel - SaveAs() Enter exception clause"); 
     Threading.Thread.Sleep(100); 
    } 
} 

Antwort

0

Die COM-Ausnahme kann verursacht werden, weil die PPTX-Datei nicht korrekt aus dem vorherigen geöffneten Zustand geschlossen wurde. Können Sie die Marshal.ReleaseCOMObject (Objekt) -Methode versuchen, nachdem Sie die PPTX-Datei gespeichert haben und versuchen Sie es erneut, wenn der Fehler geworfen wird ?. Ihr Code wäre so etwas wie,

Marshal.ReleaseComObject(powerPointApp); 

Referenz sein bitte Marshal.releaseCOMObject

Hinweis sehen: Vielleicht haben Sie auch sicher, dass keine PPTX-Instanzen in Ihrer Task-Manager machen müssen ausgeführt werden, wenn sie mit Gewalt „End“ sind indem Sie sie auswählen und auf "Aufgabe beenden" klicken.

Hoffe, dass dies hilft! Vielen Dank!

+0

Der Fehler wird auf die SaveAs() geworfen. Die Datei muss immer geöffnet bleiben. Ich kann also keine COMObjects wirklich freigeben. Es läuft auch nur ein Powerpoint.exe - Prozess. – User999999

Verwandte Themen