excel datei einlesen mit pywin32

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
Sync32
User
Beiträge: 141
Registriert: Mittwoch 27. Januar 2010, 12:42

Ich wollte eine Excel datei einlesen:

Code: Alles auswählen

import win32com.client

xls = win32com.client.Dispatch("Excel.Application")
xls.Visible = 1

wb = xls.Workbooks.Open("C:\Users\hans\Desktop\test.xls")
"""
for x in range (1,6):
    row = wb.Cells(1,x)
    print(row)"""

xls.Workbooks.Close()
Dabei kam diese Fehlermeldung:
in <module>
xls = win32com.client.Dispatch("Excel.Application")
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 104, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 84, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221005, 'Ung\xfcltige Klassenzeichenfolge', None, None)
Jemand ne idee, wie man das beheben kann?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich kann dir nicht sagen, ob das die Ursache ist, aber Du musst den String mit den Pfadangaben escapen, oder aber besser noch einen raw-String nutzen (in diesem sind die "\" als Escape zeichen "ausgeschaltet"):

Code: Alles auswählen

r"\hier\kann\mann\backshlashes\benutzen"
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sync32
User
Beiträge: 141
Registriert: Mittwoch 27. Januar 2010, 12:42

Hat leider nicht geklappt.
Ich habe mal alles andere auskommentiert. Er scheint ein Problem mit der Zeile zu haben:

Code: Alles auswählen

#...
xls = win32com.client.Dispatch("Excel.Application")
#...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hatte es aufgrund der Fehlermeldung ja vermutete - meinen Hinweis solltest Du dennoch umsetzen und beherzigen, denn das ist auch eine "beliebte" Fehlerquelle ;-)

Hast Du mal nach Excel hier gesucht? Wir haben hier doch öfter mal Threads zu dem Thema...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Kiffi
User
Beiträge: 6
Registriert: Samstag 13. November 2010, 11:32

Hallo Sync32,
Sync32 hat geschrieben:Er scheint ein Problem mit der Zeile zu haben:

Code: Alles auswählen

#...
xls = win32com.client.Dispatch("Excel.Application")
#...
ist Excel denn auf dem Rechner installiert?

Grüße ... Kiffi
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

OT:
Kiffi hat geschrieben:Grüße ... Kiffi
Hallo Kiffi, wieder ein Forum in dem wir uns treffen! Schön!
Gruß!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Anstelle von win32com würde ich die module xlrd bzw xlwt verwenden.
Damit habe ich auf jeden Fall gute Erfahrungen gemacht.
Eine Idee zu deinem Fehler habe ich spontan nicht, sorry.
Benutzeravatar
Kiffi
User
Beiträge: 6
Registriert: Samstag 13. November 2010, 11:32

<OT>

@c4s: Danke für die nette Begrüßung! :D

mal wieder ein wenig 'über-den-Tellerrand-Guckerei' betreiben.
In Bezug auf Python habe ich's bisher noch nicht bereut. Bild

</OT>
Sync32
User
Beiträge: 141
Registriert: Mittwoch 27. Januar 2010, 12:42

Excel habe ich nicht installiert.
Aber OpenOffice und die Datei dann als .xls Datei gespeichert.
Wusste nicht, dass zum Einlesen auch das originale Excel gebraucht wird.

Braucht xlrd denn zwingend auch Excel ?
Oder gibts nen Modul, welches auch eigenständig xls einlesen kann?

Danke
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Sync32 hat geschrieben:Braucht xlrd denn zwingend auch Excel ?
Die Modulbeschreibung sagt
# Platform: Any platform -- don't need Windows

Das sollte doch einen gewissen Anhaltspunkt geben, oder?
Benutzeravatar
Kiffi
User
Beiträge: 6
Registriert: Samstag 13. November 2010, 11:32

Hallo Sync32,
Sync32 hat geschrieben:Wusste nicht, dass zum Einlesen auch das originale Excel gebraucht wird.
Excel.Application kann man nun mal nur dann nutzen, wenn Excel
auf dem Rechner auch installiert ist.
Sync32 hat geschrieben:Braucht xlrd denn zwingend auch Excel ?
nein, braucht man nicht (grade unter Ubuntu erfolgreich ausprobiert).

Grüße ... Kiffi
Antworten