为何clientIDArray中出现None值?openpyxl逻辑疑问求助
问题:openpyxl处理Excel时clientIDArray意外出现None值
我在用openpyxl处理Excel文件时碰到了个头疼的问题——我明明写了逻辑要过滤空值,结果clientIDArray里还是混进了None!我知道openpyxl会给空单元格填充None,但我的判断逻辑应该能阻止这种情况才对,相关代码如下:
from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook("sample.xlsx") sheetArray = [] for sheetName in wb.sheetnames: sheetArray.append(sheetName) # print(sheetName) sheet_1 = wb[sheetArray[0]] lastRow = sheet_1.max_row # print(lastRow) clientIDArray = [] for row in sheet_1.iter_rows(min_row=1, max_row=lastRow, min_col=1, max_col=1): if [r... # 这里的判断逻辑没写完,但我原本是想过滤空值的
几个可能的原因和修复方案:
判断逻辑没正确获取单元格值
你代码里的iter_rows返回的是单元格对象的元组,不是直接的单元格值。如果你的判断逻辑没先取r.value,或者写法有误,就会漏掉过滤None。推荐用values_only=True参数直接获取值,简化代码:clientIDArray = [] # values_only=True让iter_rows直接返回单元格值,不用再手动取.value for row in sheet_1.iter_rows(min_row=1, max_col=1, values_only=True): cell_val = row[0] # 同时过滤None和空字符串(避免看起来空但实际是空格的情况) if cell_val is not None and str(cell_val).strip() != "": clientIDArray.append(cell_val)max_row包含了无数据的格式行
sheet_1.max_row会把所有有格式的行都算进去,哪怕这些行里全是空单元格。如果你Excel里有这样的空行,遍历的时候就会把None加进去。上面的代码因为加了严格的空值判断,就能自动跳过这些行。单元格存在隐形内容
有些单元格看起来是空的,但可能有空格、换行符这类隐形字符,这时候cell_val会是空字符串而不是None,所以判断时要同时处理这种情况,用str(cell_val).strip() != ""就能过滤掉。
内容的提问来源于stack exchange,提问作者Gary Dorman
相关产品推荐
相关产品推荐

