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")
假设我有一个如下例所示的 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")