Fragensteller
PowerPoint Automatisierung (Office 2010 Interop assembly): Quit will nicht

Frage
-
Hi,
ich möchte automatisiert aus meiner Anwendung eine PowerPoint-Seite generieren. Solange ich alle Referenzen lösche, geht PowerPoint beim Aufruf von "Quit()" auch wieder zu. Wenn ich aber eine Tabelle hinzufüge und dann beispielsweise die Spaltenbreiten anpasse, geht PowerPoint bei "Quit()" jedoch nicht mehr zu. Ich habe die Referenz auf das Tabellen-Shape aber mit Marshal.FinalReleaseComObject() freigegeben.
Wie muss ich ein Tabellen-Shape in C# freigeben, damit die Anwendung dann via "Quit()" auch wieder zu geht ?
Die GOOGLE-Treffer zu dem "Quit()"-Thema ansich kenne ich. Die behandeln aber keine Table-Shapes.Viele Grüße
Christoph
Alle Antworten
-
Hallo Christoph,
Probiere halt GC.Collect zu verwenden bevor Quit auf folgende Weise:
GC.Collect();
GC.WaitForPendingFinalizers ();
GC.Collect();Viele Grüße,
Bogdan- Bearbeitet Bogdan Petru Roiu Dienstag, 8. November 2011 13:17
-
Hallo Bogdan,
danke, aber das habe ich bereits versucht, da ich diesen Tipp im Internet gefunden hatte. Das reicht aber anscheinend nicht.
Wenn ich folgende tue:
// Tabelle (ist das 3. Shape auf dieser Folie) myShapes.AddTable(App.Current.MainWindow.SelectedRaumplan.Plaetze.Count + 1, 5, 28, 422 + 56, 694); var picTable = myShapes[3].Table;
Marshal.FinalReleaseComObject(picTable);
Dann funktioniert alles und PP geht zu. Aber wenn vor dem FinalReleaseComObject() z.B. ein picTable.Columns[1].Width = 56 steht, dann
funktioniert das Quit nicht mehr.
Viele Grüße Christoph
-
Hallo Christoph,
Könnte man ganz konkret bevor Marshal.FinalReleaseComObject(picTable); immer die Variable erneut initialisieren
var picTable = myShapes[3].Table;
picTable.Columns[1].Width = 56;
….
var picTable = myShapes[3].Table;
Marshal.FinalReleaseComObject(picTable);
Viele Grüße,
Bogdan
Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln. -
Hi, Christoph,
ist das Problem schon gelöst? Ich habe GC und Freigabe von COM-Objekt versucht. Das Problem ist, dass Fenster von PowerPoint immer offen bleibt.
Es gibt näturlich die Möglichkeit, PowerPoint Prozess durch Kode zu killen. Aber PowerPoint wird nächstes Mal Add-In aktivieren, weil es einen Abstürz dachte.
Ich vermute, es könnte nur durch Win32API dieses Fenster nach GC und Freigabe von COM-Objekt schließen. Was ist Ihre Lösung.
Danke im Voraus!
Viele Grüße
Jie