python openpyxl max_row计算所有行,而不是计算非空行

时间:2019-05-27 08:08:16

标签: python openpyxl

我正在使用一个Excel工作表,该工作表的总行数为999,其中20行是数据填充行,其他则为空。

所以当我打印max_rows时,它给了我999个数字而不是20个数字!我正在关注本教程-openpyxl tutorial

wb = openpyxl.load_workbook(path)
s = wb.active
print(s.max_row)

3 个答案:

答案 0 :(得分:2)

这是预期的。根据文档max_row返回

  

包含数据的最大行索引(从1开始)

即最大行索引,而不是包含数据的行数。如果您只有例如第100行,您将获得100,而不是1

答案 1 :(得分:1)

如果要使用openpyxl,则需要自己计算一下

wb = openpyxl.load_workbook(path)
ws = wb.active
count = 0
for row in ws:
    if not all([cell.value == None for cell in row]):
        count += 1

print(count)

wb = openpyxl.load_workbook(path)
ws = wb.active
print(len([row for row in ws if not all([cell.value == None for cell in row])]))

说明

如果一个单元格在xlsx中没有任何值,则在获得其值时就等于None。仅在一行根本没有任何数据时才触发检查cell.value == None for cell in row。您可以轻松地将all交换为any,以不计算具有任何空字段的行。

答案 2 :(得分:0)

我发现我不得不使用

if not all([  (cell.value == None or cell.value =='') for cell in row]):

不计算包含格式的空白单元格。否则,对于 .xlsx 文件,我会得到大约 1048535 的计数。