/ / Získať číslo riadku Excelu pomocou MS Excel - python, Excel

Získajte číslo riadku programu Excel prostredníctvom programu MS Excel - python, excel

Mám kód nižšie, ktorý sa používa na hľadanie zhodyhodnoty bunky a vráti riadok s hodnotou porovnávacej bunky, napríklad ak je hľadaná hodnota „LogiGear“ v bunke D57 (riadok 58), vráti riadok 58. Chcem vylepšiť tento kód, len hľadám iba stĺpec D. Neviem, prečo vracia chybu „neplatný reťazec triedy“.

Akákoľvek 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

odpovede:

1 pre odpoveď č. 1

Pri kladení otázky je užitočné uviesť malý príklad očakávaného vstupu a výstupu. (Mali by ste to urobiť pre budúce otázky.)

Tu je príklad, ktorý som vytvoril v programe Excel. Chceme nájsť riadok, ktorý je Vegetable.

tu zadajte popis obrázku

Kód, ktorý ste pôvodne uverejnili, prehľadá všetky riadky a stĺpce. Keď je zjednodušený a napísaný „pythonickým“ štýlom, vyzerá to takto:

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

Výstup vypadá takto:

...
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`
...

Vyššie uvedený kód prechádza cez všetky čísla stĺpcov. Môžete to povedať tak, že sa pozriete iba na jeden stĺpec col_num byť určitým číslom.

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

Výstup teraz vyzerá takto:

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`

Všimnite si, že bol zmenený iba jeden riadok kódu.


A konečne,

except Exception:
return 0

nákazlivý všetko Výnimkou je hrozná prax. Zabraňuje vám vidieť chyby. Ak nevidíte chybu, môžete ju odladiť.