Merkwürdigkeiten unter Pythen und Excel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JeanCantos
User
Beiträge: 25
Registriert: Sonntag 26. November 2006, 17:08

Freitag 19. Januar 2007, 13:12

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
BlackJack

Freitag 19. Januar 2007, 13:51

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?
JeanCantos
User
Beiträge: 25
Registriert: Sonntag 26. November 2006, 17:08

Freitag 19. Januar 2007, 14:32

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

Code: Alles auswählen

del MyApplication
schreiben. Offenkundig ist das doch hier überflüssig, da Python das Programm von selbst beendet und ergo den Speicherplatz wieder freigibt.

Gruß,

Jean
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 19. Januar 2007, 16:17

JeanCantos hat geschrieben:

Code: Alles auswählen

del MyApplication
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.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 19. Januar 2007, 16:29

Ehm, ja, hab den Thread gefunden ;)
http://www.python-forum.de/post-51333.html#51333
gerold hat geschrieben:
BlackJack hat geschrieben:

Code: Alles auswählen

del MyWorkSheet
del MyWorkbook
del MyApplication
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
:-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 19. Januar 2007, 19:19

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)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten