Después de consultar con especialistas en este tema, programadores de deferentes áreas y profesores dimos con la solución al dilema y la compartimos en este post.
Solución:
Consolidando las respuestas anteriores, puede hacerlo en una sola línea:
wb.sheet.range(column + last cell value).Get End of section going up[non blank assuming the last cell is blank].row
Código de ejemplo:
import xlwings as xw
from xlwings import Range, constants
wb = xw.Book(r'path.xlsx')
wb.sheets[0].range('A' + str(wb.sheets[0].cells.last_cell.row)).end('up').row
Esto es muy parecido a la respuesta de crazymachu., simplemente envuelto en una función. Desde la versión 0.9.0 de xlwings puedes hacer esto:
import xlwings as xw
def lastRow(idx, workbook, col=1):
""" Find the last row in the worksheet that contains data.
idx: Specifies the worksheet to select. Starts counting from zero.
workbook: Specifies the workbook
col: The column in which to look for the last cell containing data.
"""
ws = workbook.sheets[idx]
lwr_r_cell = ws.cells.last_cell # lower right cell
lwr_row = lwr_r_cell.row # row of the lower right cell
lwr_cell = ws.range((lwr_row, col)) # change to your specified column
if lwr_cell.value is None:
lwr_cell = lwr_cell.end('up') # go up untill you hit a non-empty cell
return lwr_cell.row
Intuitivamente, la función comienza encontrando la celda inferior derecha más extrema en el libro de trabajo. Luego se mueve a la columna seleccionada y luego hacia arriba hasta que llega a la primera celda que no está vacía.
Podrías intentar usar Direction
comenzando desde abajo y luego subiendo:
import xlwings
from xlwings.constants import Direction
wb = xlwings.Workbook(r'data.xlsx')
print(wb.active_sheet.xl_sheet.Cells(65536, 1).End(Direction.xlUp).Row)
valoraciones y reseñas
Tienes la opción de confirmar nuestra ocupación ejecutando un comentario o dejando una valoración te damos las gracias.