Seite 1 von 1

Probleme mit win32com und Excel

Verfasst: Freitag 13. Juli 2007, 10:42
von george
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

Re: Probleme mit win32com und Excel

Verfasst: Freitag 13. Juli 2007, 11:13
von gerold
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
:-)

Verfasst: Freitag 13. Juli 2007, 12:29
von george
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

Verfasst: Freitag 13. Juli 2007, 12:41
von gerold
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
:-)