none
PowerPoint Automatisierung (Office 2010 Interop assembly): Quit will nicht RRS feed

  • 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

    Dienstag, 8. November 2011 12:29

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

    Dienstag, 8. November 2011 13:16
  • 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 + 1528422 + 56694);
                        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
    		    
    Mittwoch, 9. November 2011 06:27
  • 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.
    Donnerstag, 10. November 2011 09:40
  • Hallo Bogdan,

    das klappt leider auch nicht. PowerPoint bleibt offen.

    Viele Grüße

    Christoph

    Montag, 14. November 2011 14:01
  • 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

    Dienstag, 18. Dezember 2012 08:59