xlwings function to find the last row with data

对着背影说爱祢 提交于 2019-12-12 12:23:48

问题


I am trying to find the last row in a column with data. to replace the vba function: LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

I am trying this, but this pulls in all rows in Excel. How can I just get the last row.

from xlwings import Workbook, Range
wb = Workbook()
print len(Range('A:A'))

回答1:


Consolidating the answers above, you can do it in one line:

wb.sheet.range(column + last cell value).Get End of section going up[non blank assuming the last cell is blank].row

Example code:

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



回答2:


This is very much the same as crazymachu's answer, just wrapped up in a function. Since version 0.9.0 of xlwings you can do this:

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

Intuitively, the function starts off by finding the most extreme lower-right cell in the workbook. It then moves across to your selected column and then up until it hits the first non-empty cell.




回答3:


One could use the VBA Find function that is exposed through api property (use it to find anything with a star, and begin your search from the first cell).

Example:

row_cell = s.api.Cells.Find(What="*",
                   After=s.api.Cells(1, 1),
                   LookAt=xlwings.constants.LookAt.xlPart,
                   LookIn=xlwings.constants.FindLookIn.xlFormulas,
                   SearchOrder=xlwings.constants.SearchOrder.xlByRows,
                SearchDirection=xlwings.constants.SearchDirection.xlPrevious,
                       MatchCase=False)

column_cell = s.api.Cells.Find(What="*",
                      After=s.api.Cells(1, 1),
                      LookAt=xlwings.constants.LookAt.xlPart,
                      LookIn=xlwings.constants.FindLookIn.xlFormulas,
                      SearchOrder=xlwings.constants.SearchOrder.xlByColumns,
                      SearchDirection=xlwings.constants.SearchDirection.xlPrevious,
                      MatchCase=False)

print((row_cell.Row, column_cell.Column))

Other methods outlined here seems to require no empty rows/columns between data.

source: https://gist.github.com/Elijas/2430813d3ad71aebcc0c83dd1f130e33




回答4:


You could try using Direction by starting at the very bottom and then moving up:

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)



回答5:


Try this:

import xlwings as xw

cellsDown = xw.Range('A1').vertical.value

cellsRight = xw.Range('A1').horizontal.value

print len(cellsDown)

print len(cellsRight)



回答6:


We can use Range object to find the last row and/or the last column:

import xlwings as xw

# open raw data file
filename_read = 'data_raw.csv'
wb = xw.Book(filename_read)
sht = wb.sheets[0]

# find the numbers of columns and rows in the sheet
num_col = sht.range('A1').end('right').column
num_row = sht.range('A1').end('down').row

# collect data
content_list = sht.range((1,1),(num_row,num_col)).value
print(content_list)


来源:https://stackoverflow.com/questions/33418119/xlwings-function-to-find-the-last-row-with-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!