Probleme mit win32com 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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Freitag 13. Juli 2007, 10:42

Hallo,

ich habe eine Anwendung programmiert, wo aus Python heraus Daten aus einem Excelfile gelesen werden.

Jetzt habe ich aber das Problem, dass das Initialisieren der COM-Schnittstelle nicht immer sauber funktioniert.
Auf dem Ausführungsrechner sind immer einige Excelfiles(5-10) geöffnet. Diese sind zum Teil modifiziert aber nicht abgespeichert.
Öffne ich jetzt meine Anwendung und will das Excelfile öffnen:

Code: Alles auswählen

def __init__(self, filename=None):
        self.xlApp = win32com.client.dynamic.Dispatch('Excel.Application')
        if filename:
            self.filename = filename
            #feststellen, ob die Exceldatei bereits geöffnet ist
            workBooks = self.xlApp.Workbooks
            boolFileIsOpen = False
            for doc in self.xlApp.Workbooks:
                if (filename.find(doc.Name) != (-1)):
                    boolFileIsOpen = True
                    self.xlBook = doc
            #wenn Datei noch nicht geöffnet ist, dann öffnen
            if (boolFileIsOpen == False):
                self.xlBook = self.xlApp.Workbooks.Open(filename)
            
        else:
            self.xlBook = self.xlApp.Workbooks.Add()
            self.filename = ''  
kriege ich die Fehlermeldung, das "self.xlApp" keine "Workbooks" hat.
Diese Fehlermeldung kommt aber nicht immer, sondern sporadisch.
Ich denke, dass dies durch die vielen geöffneten Excelanwendungen im Zusammenhang mit der COM-Schnittstelle verursacht wird.

Habt ihr diesbezüglich schon Erfahrungen gesammelt????
Danke

gruss george
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 13. Juli 2007, 11:13

george hat geschrieben:kriege ich die Fehlermeldung, das "self.xlApp" keine "Workbooks" hat.
Hallo george!

Prüfe einfach vorher mit ``Workbooks.Count > 0`` ob es ein Workbook gibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Freitag 13. Juli 2007, 12:29

Hallo gerold,

danke für deine Antwort. Ich habe die zusätzliche Zeile eingefügt. Kann es momentan aber leider nicht auf dem Zielrechner testen.

Ich vermute aber, dass der Dispatch-Aufruf

Code: Alles auswählen

self.xlApp = win32com.client.dynamic.Dispatch('Excel.Application')
nicht sauber funktioniert, da dieser Fehler sporadisch auftritt.

danke und gruss
george
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 13. Juli 2007, 12:41

george hat geschrieben:Ich vermute aber, dass der Dispatch-Aufruf nicht sauber funktioniert, da dieser Fehler sporadisch auftritt.
Hallo george!

Du weißt ja nie, welche Excel-Instanz angesprochen wird. Also musst du dich darum kümmern, dass vorher geprüft wird, ob es in der Instanz schon eine Arbeitsmappe gibt. Ich vermute also nicht, dass es ein Problem mit Dispatch gibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten