使用xlwings计算Python中excel表中的行数

时间:2015-07-27 16:52:52

标签: python excel xlwings

我在Python中有一个脚本,它使用xlwings打开一个Excel文件,并逐行读取和处理某列的值。这是 for 语句:

for row in range(2, rownum):

我想在工作表中实际包含某些内容的每一行上重复此功能。它从2开始,到rownum'结束。我的问题是如何自动计算行数并将该值传递给' rownum'。我确定xlwings有办法做到这一点,但我无法弄清楚 - 也许是Autofit工具?

感谢您的帮助!

6 个答案:

答案 0 :(得分:5)

全是API Documentation

如果您只查找行数,可以使用范围的current_region属性获取数组/表中的行总数,然后获取最后一个单元格的地址。此范围:(仅当您的范围是连续的时才有效 - 内部没有空的行/列)

rownum = Range('A1').current_region.last_cell.row

或者,您可以使用table代替current_region,范围会略有不同。

一旦你有了,你可以循环遍历行:

for i in range(1, rownum + 1): # The indexing starts at 1
    Range((i, 1)) = ...    # Will select cell 'Ai'

但正如其他答案中所提到的,这会使app之间的调用倍增,这将会相当慢。更好地导入范围,修改它并将其导出回Excel。

答案 1 :(得分:2)

除非我在阅读API documentation时遗漏了某些内容,否则它似乎无法实现。您可能需要使用其他库,例如pandas

import pandas as pd

df = pd.read_excel(excel_file_path, sheetname="Sheet1")
print len(df)

如果你不想仅仅为了这个而使用另一个图书馆,你可以用硬而丑的方式去做:

last_row = 0
while True:
    if cell_value is not None:  # replace cell_value with however 
                                # xlwings accesses a cell's value
       last_row += 1
    else:
        break

print last_row

答案 2 :(得分:0)

使用xlwings,您将先读取Range,然后迭代它:

open -a 'phpstorm.app' file-or-folder

然后在最后,将结果写回:

rng = Range((startrow, startcol), (rownum, colnum)).value
for row in rng:
    ...

这样可以最大程度地减少缓慢的跨应用程序调用。

您可能还想使用Range.table

答案 3 :(得分:0)

如果没有空白行,您可以使用:

len(Range('A1').vertical)

答案 4 :(得分:0)

我不得不制作一个柜台,因为我正在自动化一大堆从excel中获取并填充到不同网站上的东西。这只是"原型"我想出来就是为了确保我能做到。

wb = xw.Book(r'C:\Users\dd\Desktop\Testbook.xlsm') 
Dudsht = wb.sheets['Dud']

lastcell = Dudsht.range(1,1).end('down').row #this just does ctrl+shift+down
print(lastcell) #just so you know how many rows you have. Mine was 30.

x = 2
for i in range(x, lastcell+1):               #range of 2 to 30
        Dudsht.cells(i,2).value = 'y'        #enters 'y' triggering formulas
        if Dudsht.cells(i,1).value == 'ERROR':  
            Dudsht.cells(i,1).api.EntireRow.Interior.ColorIndex = 2
            continue          #if there is an error it will hightlight and skip an item
        time.sleep(.5)            #this was just so I could see visually
        Dudsht.cells(i,2).value = 'x'  
        print('Item' + str(i) + ' Complete')  #Item1 Complete
        time.sleep(.5)
        Dudsht.cells(i,1).api.EntireRow.Interior.ColorIndex = 3  #highlights completed item

答案 5 :(得分:0)

您不需要知道工作表中有多少行。

import xlwings as xw

wb = xw.Book('20180301.xlsm')
sh = wb.sheets['RowData']

rownum = 2
while (sh.range('A'+str(rownum)).value != None):
    value = sh.range('A'+str(rownum)).value
    print(str(value))
    rownum += 1

这将打印出A列中的所有数据。