Seite 1 von 1
Excel Option 'Gesamten Zellinhalt vergleichen" ?
Verfasst: Freitag 17. Juli 2009, 17:20
von 2weizen
Moin, moin!
Ich möchte Excel dazu veranlassen, das es bei einer Suche den gesamten Zellinhalt vergleicht. Nur leider scheint diese Option aus Python heraus ignoriert zu werden.
Ich habe schon folgendes probiert:
Code: Alles auswählen
fnd = lst.Find(m, LookAt="xlWhole")
fnd = lst.Find(m, LookAt=1)
fnd = lst.Find(m, LookAt="1")
Alles erfolglos. Bei der der Suche nach 1 wird auch 10, etc., gefunden.
Hat das jemand schonmal erfolgreich versucht und kann mir den richtigen Weg aufzeigen?
Verfasst: Freitag 17. Juli 2009, 20:33
von HWK
Hast Du schon
probiert?
MfG
HWK
Verfasst: Freitag 17. Juli 2009, 21:54
von 2weizen
Bis eben noch nicht. Aber win32com.client.constants.xlWhole gibt bei mir einen Fehler (pywin32-213-py2.6). Habe mal in win32com/client/ geschaut. Dort findet sich nix mit constants. hmm?
Aber laut MSDN hat xlWhole ja den Wert 1, also müsste es doch normalerweise auch damit gehen, oder übersehe ich noch etwas?
Verfasst: Samstag 18. Juli 2009, 07:49
von HWK
win32com.client.constants ist eine Instanz der Klasse Constants in __init__.py. Die Konstanten müssen aber erst mit makepy.py erzeugt werden.
Evtl. probierst Du mal
Code: Alles auswählen
fnd = lst.Find(m, None, None, win32com.client.constants.xlWhole)
MfG
HWK
Verfasst: Samstag 18. Juli 2009, 09:17
von Dill
mal was generelles zur arbeitsweise mit excel:
führe die gewünschten operationen in der gui durch und zeichne ein makro auf. dann hast du den kram schonmal in vba. das ist dann schonmal ein schöner ausgangspunkt, meist kann man das dann direkt übersetzen.
Verfasst: Samstag 18. Juli 2009, 21:47
von HWK
Also bei mir funktioniert es:
Code: Alles auswählen
import os
import win32com.client
excel_app = win32com.client.dynamic.Dispatch('Excel.Application')
excel_workbook = excel_app.Workbooks.Open(os.path.abspath('Mappe1.xls'))
lst = excel_workbook.Worksheets('Tabelle1').Range('a1:a7')
print lst
first = fnd = lst.Find(1, LookAt=win32com.client.constants.xlWhole)
while fnd:
print fnd.Address
fnd = lst.FindNext(fnd)
if fnd.Address == first.Address:
break
excel_workbook.Close()
del excel_workbook
excel_app.Quit()
del excel_app
liefert die Ausgabe
Code: Alles auswählen
((10.0,), (11.0,), (1.0,), (21.0,), (1.0,), (19.0,), (1.0,))
$A$3
$A$5
$A$7
MfG
HWK
Verfasst: Mittwoch 22. Juli 2009, 18:01
von 2weizen
So, hatte nun endlich Zeit, mich mal wieder meinem Problem zu widmen.
Danke Dir HWK. makepy war der entscheidende Tip. War zwar der Meinung ich hätte das schonmal ausgeführt, aber wohl doch nicht.
