使用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)