为什么 "None" 值在 clientIDArray 中?

Why is "None" value In clientIDArray?

如果单元格为空,

openPyxl 会放置一个 None 值,但我认为我的逻辑会阻止 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 [row[0].value] != "None":
        clientIDArray.append(row[0].value)

for id in clientIDArray:
    print(id)

wb.close()

你放在哪里

if [row[0].value] != "None":
    clientIDArray.append(row[0].value)

[row[0].value] 正在创建一个以 row[0].value 作为其项目的列表。这意味着作为列表,它永远不会是 None,因此您的 if 语句始终执行,并且 None 值被放入数组中。

如果 row[0].valueNone 那么你的 if 语句变成

if [None] != "None":

并且列表永远不会是 None

此外,您应该使用 None 而不是 "None"

您应该像这样更改代码。 None 是 built-in 对象。

https://docs.python.org/3.6/library/constants.html#None

if row[0].value is not None:

首先,if [row[0].value] != "None": 正在比较单个元素为 row[0].value 的列表。该列表永远不能等于 None"None" 或除列表以外的任何其他内容。您可能只想比较 row[0].value.

其次,您要过滤掉的值可能是 None 值,而不是字符为 "None".

的字符串值

第三,如果最后一个是对的,你几乎总是想用is,而不是==来和None比较。

所以:

if row[0].value is not None: