Das kann ich mir kaum vorstellen. Finde besser mal heraus was es *wirklich* für ein Typ ist. Die `type()` Funktion sollte dabei helfen.eiwolf hat geschrieben:ja sobald ein umlaut enthalten ist, ist es ein Zellenobjekt oder so? Solange kein umlaut enthalten ist funzt es problemlos.
Daten aus Excel auslesen
Ich hab jetzt mal die type() funktion benutzt. In der Konsole wird "<type 'instance'>" ausgegeben.
Code: Alles auswählen
class Excel:
def __init__(self,excelpath,Sheet):
self.excelobj = win32com.client.Dispatch("Excel.Application")
self.excelobj.Visible = True
self.wb = self.excelobj.Workbooks.Open(Filename = excelpath, ReadOnly = True)
self.ws = self.wb.Sheets(Sheet)
def ReturnValue(self,Line,Row):
print type(self.ws.Range(Line+Row))
return self.ws.Range(Line+Row)
def close(self):
del excelobj
Also ist es schon mal keine Zeichenkette. Mit `obj.__class__.__name__` kannst Du herausfinden wie die Klasse heisst und mit `dir(obj)` welche Methoden es gibt.
Super...Danke.
Auf zur nächsten Runde: Konsolenausgaben siehe komentare...
Mit dem CDispatch kann ich leider nichts anfangen....
Ausgabe von dir(self.ws):
['_ApplyTypes_', '_FlagAsMethod', '_LazyAddAttr_', '_NewEnum', '_Release_', '__AttrToID__', '__LazyMap__', '__call__', '__cmp__', '__doc__', '__getattr__', '__getitem__', '__init__', '__int__', '__len__', '__module__', '__nonzero__', '__repr__', '__setattr__', '__setitem__', '__str__', '_builtMethods_', '_enum_', '_find_dispatch_type_', '_get_good_object_', '_get_good_single_object_', '_lazydata_', '_make_method_', '_mapCachedItems_', '_oleobj_', '_olerepr_', '_print_details_', '_proc_', '_unicode_to_string_', '_username_', '_wrap_dispatch_']
kann ich leider auch nichts damit anfangen - hab auch schon die Hilfe benutzt, aber nichts brauchbares gefunden...
Danke für deine Geduld BlackJack - ich seh schon ich kann (muss) noch viel lernen.
Auf zur nächsten Runde: Konsolenausgaben siehe komentare...
Code: Alles auswählen
class Excel:
def __init__(self,excelpath,Sheet):
self.excelobj = win32com.client.Dispatch("Excel.Application")
self.excelobj.Visible = True
self.wb = self.excelobj.Workbooks.Open(Filename = excelpath, ReadOnly = True)
self.ws = self.wb.Sheets(Sheet)
def ReturnValue(self,Line,Row):
print type(self.ws.Range(Line+Row)) # <type 'instance'>
print self.ws.__class__.__name__ #CDispatch
print dir(self.ws) # siehe weiter unten
print self.ws._unicode_to_string_ #false
return self.ws.Range(Line+Row)
def close(self):
del excelobj
Ausgabe von dir(self.ws):
['_ApplyTypes_', '_FlagAsMethod', '_LazyAddAttr_', '_NewEnum', '_Release_', '__AttrToID__', '__LazyMap__', '__call__', '__cmp__', '__doc__', '__getattr__', '__getitem__', '__init__', '__int__', '__len__', '__module__', '__nonzero__', '__repr__', '__setattr__', '__setitem__', '__str__', '_builtMethods_', '_enum_', '_find_dispatch_type_', '_get_good_object_', '_get_good_single_object_', '_lazydata_', '_make_method_', '_mapCachedItems_', '_oleobj_', '_olerepr_', '_print_details_', '_proc_', '_unicode_to_string_', '_username_', '_wrap_dispatch_']
kann ich leider auch nichts damit anfangen - hab auch schon die Hilfe benutzt, aber nichts brauchbares gefunden...
Danke für deine Geduld BlackJack - ich seh schon ich kann (muss) noch viel lernen.
Soweit ich weiß gibt Range() immer ein Range-Objekt zurück. Dass man sich bei Excel nicht darauf verlassen kann, ist für mich auch keine Überraschung. Ich lese Werte aus einzelnen Zellen in dieser Art:
Wobei ich noch eine kleine Funktion geschrieben habe, die mir die Spaltennamen in Zahlen umwandelt, denn x und y in obigem Beispiel müssen Zahlenkoordinaten sein.
HTH
edit: nochmal in der Hilfe nachgelesen, dort steht
Code: Alles auswählen
self.ws.Cells(y, x).Value
HTH
edit: nochmal in der Hilfe nachgelesen, dort steht
Range-Eigenschaft, wie sie auf die Objekte Application, Range und Worksheet angewendet wird.
Gibt ein Range-Objekt zurück, das eine Zelle oder einen Zellbereich darstellt.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt