为什么在clientIDArray中“无”值?

时间:2018-03-24 18:40:01

标签: python openpyxl

如果单元格为空,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()

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:2)

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

其次,您尝试过滤的值大概是None值,而不是字符为"None"的字符串值。

第三,如果最后一个是正确的,那么您几乎总是希望使用is而不是==来与None进行比较。

所以:

if row[0].value is not None:

答案 1 :(得分:1)

你应该改变这样的代码。 None是内置对象。

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

if row[0].value is not None:

答案 2 :(得分:0)

你放在哪里

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"