openpyxl - 如何找到包含特定字符串的最大行?

openpyxl - how to find the max row that contains a specific string?

假设我有一个如下例所示的 excel 电子表格。如何使用 openpyxl 检查最后一行是否包含第 1 列中的字符串“xyz”?对于上下文,最终用例是在最后一行包含 xyz

时发送电子邮件
column 1 column 2
1 abc 1 123
2 abc 2 456
3 abc 1 123
4 xyz 1 123
5 xyz 2 456
6 abc 1 123
7 abc 2 456
import smtplib
import sys
import openpyxl

wb = openpyxl.load_workbook("myworkbook.xlsx")
ws = wb.get_sheet_by_name("myworksheet")

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

max_row = count-1

if "xyz" in row[max_row].value:
    print("hi")

编辑:以前版本中的最大行不起作用,因为它出于某种原因总是返回第 999 行。使用新代码,它 returns 是正确的最大行。现在问题出在 row[max_row].value 上。我得到 TypeError: argument of type 'NoneType' 不可迭代,因为“行”是 NoneType。 xyz 是字符串,max_row 是整数,问题出在 row

为了简单起见,还删除了 for 循环并以 print hi 结束它,因为我不是在问最后一部分。

当调用 row[max_row] 时,您正在尝试获取 row 的第 max_row-第 ,而不是工作的最后一行 sheet.您应该指向 sheet 最后一行的特定列,即使用来自 openpyxl (https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.worksheet.html#openpyxl.worksheet.worksheet.Worksheet.cell) 的单元格函数:

if 'xyz' in str(ws.cell(row=max_row, col=2).value):
    print('hi')

谢谢两位,这就是最终的工作。

import openpyxl

wb = openpyxl.load_workbook("myworkbook.xlsx")
ws = wb.get_sheet_by_name("myworksheet")

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

max_row = count-1    

if "xyz" in ws.cell(max_row, 2).value:
    print("hi")