Seite 1 von 1
Merkwürdigkeiten unter Pythen und Excel
Verfasst: Freitag 19. Januar 2007, 13:12
von JeanCantos
Hallo zusammen,
zurzeit über ich mich etwas in Python (v2.5), insbesondere im Unterfangen, Excel (2003) daraus zu steuern. Hierbei tritt folgende Merkwürdigkeit auf.
Der folgende Code funktioniert einwandfrei:
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
import win32com.client
## Excel Anwendung öffnen
MyApplication = win32com.client.Dispatch("Excel.Application")
MyApplication.Visible = True
## Arbeitsmappe auswählen
MyWorkbook = MyApplication.Workbooks.Open("D:\Test.xls")
Kommentiere ich nun die letzte Zeile heraus:
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
import win32com.client
## Excel Anwendung öffnen
MyApplication = win32com.client.Dispatch("Excel.Application")
MyApplication.Visible = True
## Arbeitsmappe auswählen
## MyWorkbook = MyApplication.Workbooks.Open("D:\Test.xls")
Führe ich den Code im Debugermodus aus, so wird Excel zwar gestartet, sobald aber
MyApplication.Visible = True
ausgeführt wird, schließt sich Excel wieder.
Weiß jemand Rat?
Gruß,
Jean
Verfasst: Freitag 19. Januar 2007, 13:51
von BlackJack
Dann ist das Programm ja zuende. Was passiert wenn Du das auskommentierte durch eine Anweisung ersetzt, also zum Beispiel ein einfaches ``print``, damit das Programm an der Stelle noch nicht beendet ist?
Danke
Verfasst: Freitag 19. Januar 2007, 14:32
von JeanCantos
Hallo BlackJack,
vielen Dank für deinen Hinweis.
Anscheinend schließt Python Excel automatisch, sobald das PythonScript beendet ist.
Ich bin etwas verwundert, da ich meine hier gelernt zu haben, ich solle immer am Ende des Programms
schreiben. Offenkundig ist das doch hier überflüssig, da Python das Programm von selbst beendet und ergo den Speicherplatz wieder freigibt.
Gruß,
Jean
Re: Danke
Verfasst: Freitag 19. Januar 2007, 16:17
von sape
JeanCantos hat geschrieben:
schreiben. Offenkundig ist das doch hier überflüssig, da Python das Programm von selbst beendet und ergo den Speicherplatz wieder freigibt.
Hahalt! Ich glaube mich zu erinnern das Gerold mal geschrieben hat, das es notwendig ist ein ``del`` zu schreiben wenn man unter Windows Excel über `win32com` anspricht. Es gab da irgendwelche Probleme wenn man das nicht macht. Ich schau mal das ich den Thread gleich finde.
Verfasst: Freitag 19. Januar 2007, 16:29
von sape
Ehm, ja, hab den Thread gefunden
http://www.python-forum.de/post-51333.html#51333
gerold hat geschrieben:BlackJack hat geschrieben:
Einfache Namen zu löschen ist in der Regel überflüssig. Das habe ich in den der Zeit, die ich Python schon verwende, noch nie machen müssen.
Hi BlackJack!
Ich hatte schon öfter Probleme, wenn ich das bei der Ansteuerung von Excel NICHT gemacht habe. Es ist anscheinend wichtig, dass die Objekte in der richtigen Reihenfolge zerstört werden, sonst bleiben sie im Speicher hängen -- auch wenn das Python-Programm schon längst beendet ist.
Ich empfehle ``del`` nach dem Ansteuern von COM-Servern zu benutzen.
lg
Gerold

Re: Merkwürdigkeiten unter Pythen und Excel
Verfasst: Freitag 19. Januar 2007, 19:19
von gerold
JeanCantos hat geschrieben:Weiß jemand Rat?
Hi Jean!
Wo ist dein Problem. Dein Excel 2003 verhält sich ja besser als erwartet. Es schließt sich, obwohl du vergessen hast, Excel zu entsorgen. (``...Close() ...Quit()``).
Die Verwendung von ``del`` ist nur ein zusätzliches Sicherheitsnetz, da sich COM zwar oft, aber nicht immer an die Regeln von Python hält. -- Von besonderem Vorteil, wenn man "Idle" als IDE verwendet. Und es tut niemandem weh.
Wenn du einfach nur Excel öffnen willst, dann verwende ``os.startfile()``.
mfg
Gerold
PS: Erwarte nicht, dass sich jedes Excel unter jedem Windows gleich verhält. Es gibt schon einen Grund, weshalb ich in meinen Beispielen alles schön der Reihe nach aufbaue und dann in umgekehrter Reihenfolge wieder entsorge. (Siehe:
http://www.python-forum.de/post-55241.html#55241)