/ / Uzyskaj numer wiersza Excela przez MS Excel - python, excel

Uzyskaj numer wiersza programu Excel za pomocą programu MS Excel - python, excel

Mam poniższy kod, który służy do wyszukiwania dopasowaniawartość komórki i zwraca wiersz pasującej wartości komórki, np. szukana wartość to „LogiGear” w komórce D57 (wiersz 58), zwróci wiersz 58. Chcę poprawić ten kod, szukając tylko kolumny D. Nie wiem, dlaczego zwraca błąd „niepoprawny ciąg klasy”.

Jakakolwiek rada?

"""
get excell row number via MS
"""

def GetExcellRowNumberViaMS(strFile, strSheet, text):
try:
bFound = False
#Create an instance of Excel.Application
xlApp = win32com.client.Dispatch("Excel.Application")
lnRowNumber=0;
i = 1
lastrow = xlSheet.UsedRange.Rows.Count
lastcol = xlSheet.UsedRange.Columns.Count
while(i<65000 and bFound ==False):
if(i == lastrow+1):
break
j = 1
while(j<256):
if(j == lastcol+1):
break
value = str(xlSheet.Cells(i,j).Text)
if(value.strip() == str(text).strip()):
lnRowNumber = i
bFound = True
break
j = j + 1
i = i + 1
return lnRowNumber
except Exception:
return 0

Odpowiedzi:

1 dla odpowiedzi № 1

Zadając pytanie, warto podać mały przykład oczekiwanych danych wejściowych i wyjściowych (powinieneś to zrobić w przypadku przyszłych pytań).

Oto przykład, który stworzyłem w programie Excel. Chcemy znaleźć wiersz, który jest Vegetable.

wprowadź opis obrazu tutaj

Pierwotnie opublikowany kod przeszukuje wszystkie wiersze i kolumny. Po uproszczeniu i napisaniu w stylu „pythonowym” wygląda następująco:

import win32com.client

excel = win32com.client.Dispatch("Excel.Application")
worksheet = excel.ActiveSheet # The currently open worksheet, in the currently open file.

# This version searches all rows and columns.
for row_num in range(worksheet.UsedRange.Rows.Count):
for col_num in range(worksheet.UsedRange.Columns.Count):
# Note Python"s range() counts from 0 and Excel counts from 1
value = worksheet.Cells(row_num + 1, col_num + 1).Value
print ("Value at row %i, column %i is `%s`" % (row_num, col_num, value))
if value == "Vegetable":
print "Hooray! Row %i is a vegetable!" % row_num

Wynik wygląda następująco:

...
Value at row 4, column 0 is `5.0`
Value at row 4, column 1 is `Eggplant`
Value at row 4, column 2 is `Vegetable`
Hooray! Row 4 is a vegetable!
Value at row 5, column 0 is `6.0`
...

Powyższy kod zapętla wszystkie numery kolumn. Możesz powiedzieć, aby patrzył tylko na jedną kolumnę, poprzez naprawienie col_num być określoną liczbą.

for row_num in range(worksheet.UsedRange.Rows.Count):
col_num = 2 # Fixed to look at column 2 only
# Note Python"s range() counts from 0 and Excel counts from 1
value = worksheet.Cells(row_num + 1, col_num + 1).Value
print ("Value at row %i, column %i is `%s`" % (row_num, col_num, value))
if value == "Vegetable":
print "Hooray! Row %i is a vegetable!" % row_num

Dane wyjściowe wyglądają teraz tak:

Value at row 0, column 2 is `Fruit`
Value at row 1, column 2 is `Fruit`
Value at row 2, column 2 is `Fruit`
Value at row 3, column 2 is `Fruit`
Value at row 4, column 2 is `Vegetable`
Hooray! Row 4 is a vegetable!
Value at row 5, column 2 is `Fruit`

Zauważ, że zmieniła się tylko jedna linia kodu.


Wreszcie,

except Exception:
return 0

Uchwyt wszystko wyjątki to okropna praktyka. Zapobiega wyświetlaniu błędów. Jeśli nie widzisz błędu, nie możesz go debugować.