/ / Obtener el número de fila de Excel a través de MS Excel - python, excel

Obtenga el número de fila de Excel a través de MS Excel - python, excel

Tengo el código de abajo, lo uso para buscar una coincidenciael valor de la celda y devuelve la fila del valor de la celda de coincidencia, como buscar valor es "LogiGear" en la celda D57 (fila 58), devolverá la fila 58. Quiero mejorar este código, solo buscando la columna D solamente. No sé por qué devuelve el error "cadena de clase no válida".

¿Algún consejo?

"""
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

Respuestas

1 para la respuesta № 1

Al hacer una pregunta, es útil incluir un pequeño ejemplo de la entrada y salida esperada (debe hacer esto para futuras preguntas).

Aquí hay un ejemplo que he hecho en Excel. Queremos encontrar la fila que es una Vegetable.

enter image description here

El código que originalmente publicaste busca en todas las filas y columnas. Cuando se simplifica y se escribe en un estilo "pythonic", parece:

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

La salida se ve como:

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

El código anterior recorre todos los números de columna. Puedes decirle que solo mire una columna, fijando col_num ser un número determinado.

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

La salida ahora se ve como:

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`

Observe que solo se cambió una línea de código.


Finalmente,

except Exception:
return 0

Atractivo todas Las excepciones es una práctica horrible. Te impide ver los errores. Si no puede ver un error, no puede depurarlo.