每日10行代码78:openpyxl获取真正的最大数据行数

176 篇文章 4 订阅
15 篇文章 2 订阅

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的话,会造成某些时候处理了不需要的行。

  • 15
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要使用openpyxl获取指定列的行数,可以使用以下代码: ```python from openpyxl import load_workbook workbook = load_workbook(filename="test.xlsx") sheet = workbook\["Sheet1"\] column = "A" # 指定列的字母标识,例如A表示第一列 row_count = sheet.max_row # 获取最大行数 column_data = sheet\[column\] # 获取指定列的数据 # 遍历指定列的数据,找到最后一个非空单元格的行数 for cell in column_data: if cell.value is None: row_count -= 1 print("指定列的行数:", row_count) ``` 这段代码首先加载Excel文件并选择指定的工作表。然后,通过指定列的字母标识,例如"A"表示第一列,获取该列的数据。接下来,通过遍历该列的数据,找到最后一个非空单元格的行数。最后,打印出指定列的行数。 #### 引用[.reference_title] - *1* [openpyxl 获取单元格的值、、列、坐标](https://blog.csdn.net/qq_26086231/article/details/123238733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python处理Excel文件:openpyxl](https://blog.csdn.net/zangzh/article/details/124342461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值