питон 3.6, xlwings 0.11
Раствор 1
Чтобы найти последнюю строку с данными, вы должны выполнить некоторую работу как по горизонтали, так и по вертикали. Вы должны пройти через каждый столбец, чтобы определить, какая строка является последней строкой.
import xlwings
workbook_all = xlwings.Book(r'path.xlsx')
objectiveSheet = workbook_all .sheets['some_sheet']
# lastCellContainData(), inspired of Stefan's answer.
def lastCellContainData(objectiveSheet,lastRow=None,lastColumn=None):
lastRow = objectiveSheet.cells.last_cell.row if lastRow==None else lastRow
lastColumn = objectiveSheet.cells.last_cell.column if lastColumn==None else lastColumn
lastRows,lastColumns = [],[]
for col in range(1,lastColumn):
lastRows.append(objectiveSheet.range((lastRow, col)).end('up').row)
# extract last row of every column, then max(). Or you can compare the next
# column's last row number to the last column's last row number. Here you get
# the last row with data, you can also go further get the last column with data:
for row in range(1,lastRow):
lastColumns.append(objectiveSheet.range((row, lastColumn)).end('left').column)
return max(lastRows),max(lastColumns)
lastCellContainData(objectiveSheet,lastRow=5000,lastColumn=300)
Я добавил lastRow и lastColumn. Чтобы сделать программу более эффективной, вы можете установить эти параметры в соответствии с приблизительной формой данных, с которыми вы имеете дело.
Решение 2
xlwings удостоен чести быть оболочкой pywin32. Я не знаю, позволяет ли ваша ситуация использовать клавиатуру или мышь. Если да, то сначала вы ctrl+tab переключаетесь на рабочую книгу, затем ctrl+a выбираете область, содержащую данные, затем вызываете workbook_all.selection.rows.count
.
другой способ: когда вы знаете, где находится правая нижняя ячейка ваших данных, скажем, AAA10000, просто позвоните objectiveSheet.range('A1:'+'AAA10000').current_region.rows.count
person
Steven
schedule
10.02.2021