![](/img/trans.png)
[英]How to find first data row and column of excel in python xlwings
[英]xlwings function to find the last row with data
我試圖在包含數據的列中找到最后一行。 替換 vba function: LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
我正在嘗試這個,但這會拉入 Excel 中的所有行。我怎樣才能得到最后一行。
from xlwings import Workbook, Range
wb = Workbook()
print len(Range('A:A'))
整合上面的答案,你可以在一行中完成:
wb.sheet.range(column + last cell value).Get End of section going up[non blank assuming the last cell is blank].row
示例代碼:
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
這與 crazymachu 的答案非常相似,只是包含在一個函數中。 從 xlwings 0.9.0 版開始,您可以執行以下操作:
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
直觀地說,該函數首先查找工作簿中最極端的右下角單元格。 然后它移動到您選擇的列,然后向上移動,直到遇到第一個非空單元格。
您可以嘗試通過從最底部開始然后向上移動來使用Direction
:
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)
我們可以使用 Range 對象來查找最后一行和/或最后一列:
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)
嘗試這個:
import xlwings as xw
cellsDown = xw.Range('A1').vertical.value
cellsRight = xw.Range('A1').horizontal.value
print len(cellsDown)
print len(cellsRight)
可以使用通過 api 屬性公開的 VBA Find 函數(使用它來查找帶有星號的任何內容,並從第一個單元格開始搜索)。
例子:
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))
此處概述的其他方法似乎不需要數據之間的空行/列。
來源:https ://gist.github.com/Elijas/2430813d3ad71aebcc0c83dd1f130e33
蟒蛇 3.6,xlwings 0.11
要找到包含數據的最后一行,您應該在水平和垂直方向上做一些工作。 您必須遍歷每一列以確定哪一行是最后一行。
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。 為了使程序更有效,您可以根據您正在處理的數據的大致形狀來設置這些參數。
xlwings 很榮幸成為 pywin32 的包裝器。 我不知道您的情況是否允許使用鍵盤或鼠標。 如果是這樣,請先按 ctrl+tab 切換到工作簿,然后按 ctrl+a 選擇包含數據的區域,然后調用workbook_all.selection.rows.count
。
另一種方式:當你知道你的數據的右下角單元格在哪里時,比如 AAA10000,只需調用objectiveSheet.range('A1:'+'AAA10000').current_region.rows.count
更新:
一段時間后,沒有一個解決方案對我來說是真正直觀的,所以我決定編譯以下內容:代碼:
import xlwings as Objxlwings
import xlwings.constants
def Return_RangeLastCell(ObjWS):
return ObjWS.api.Cells.SpecialCells(xlwings.constants.CellType.xlCellTypeLastCell)
我試圖與從 Excel 調用它的方式保持一致,以保持簡單
然后在我的主要代碼上,我只是這樣稱呼它:
ObjWS=Objxlwings.Book('Book1.xlsx').sheets["Sheet1"]
print(Return_RangeLastCell(ObjWS).Column)
有趣的解決方案。 但也許是這樣的:
print(sheet.used_range.last_cell.row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.