使用xlwings在Python中的Excel表格中统计行数

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

for row in range(2, rownum): 

我想在表单中实际包含某些东西的每一行重复这个函数。 它从2开始到“rownum”结束。 我的问题是如何自动计算行数并将该值传递给'rownum'。 我确信xlwings有办法做到这一点,但我无法弄清楚 – 可能是Autofit工具?

谢谢您的帮助!

除非我在阅读API文档时错过了某些东西,否则这似乎不可能。 您可能需要使用其他库,例如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 

这是所有的API文档

如果只查找行数,可以使用range的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' 

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

使用xlwings,你可以先读取范围,然后迭代它:

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

然后最后把结果写回来:

 Range((startrow, startcol)).value = result_rng 

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

你可能也想使用Range.table

如果没有空行,你可以使用这个:

 len(Range('A1').vertical)