openpyxl里sheet.max_row可以获取最大行,但是这个变量有个问题,就是对那些原先有数据,后来又删除的表,容易出现获取最大行不是所需要值的情况,这是因为openpyxl把一些格式改变过的单元格也算成有效行了。
我写了一个函数来获取真正有效的最大数据行:

import openpyxl
filename = 'test_max_row.xlsx'
wb=openpyxl.load_workbook(filename)
ws = wb.active
i= ws.max_row
print("max_row获得的最大行是:",i)
# print(type(ws.cell(1,2).value))


def get_max_row(sheet):
    i=sheet.max_row
    real_max_row = 0
    while i > 0:
        row_dict = {i.value for i in sheet[i]}
        if row_dict == {None}:
            i = i-1
        else:
            real_max_row = i
            break

    return real_max_row


j = get_max_row(ws)
print("通过自定义函数获取到的最大行是:", j)

输出结果:

max_row获得的最大行是: 7
通过自定义函数获取到的最大行是: 3

可以看出两个的结果是不一样的。
测试表格是这样的:
在这里插入图片描述
因为第7行的数据我给定义一个数据格式,max_row取得的最大行就是7了,这显然不是我们想要的,由此造成的结果就是我们用max_row的话,会造成某些时候处理了不需要的行。

更多推荐