Excel工作表上的两个if-test条件,使用xlrd

时间:2015-08-12 04:24:04

标签: python excel if-statement xlrd

我正在使用以下代码从Excel文件中提取数据:

for row in range(sheet.nrows):                      # For-loop, for all rows
                 for col in range(sheet.ncols):     # For-loop, for all columns
                    if((re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and str(sheet.cell(row+2,col).value)!=None):            # If cell starts with F(number)-(several word chars) AND if cell two rows below this is not empty
                        works2.write(num_row+1,num_col,(sheet.cell(row,col)).value)     
                        works2.write(num_row, num_col,(sheet.cell(row-2,col)).value
    ect...

此代码运行良好,直到我将第二个条件添加到if test 。我不希望代码读取任何没有数据的列,即第二个if-test条件。然而,目前,第二个if-test什么也没做,我还在读几个空列的数据。有人可以帮我发现我的错误/可能重新判断我的第二个如果测试,以便它检查单元格下面的单元格2行(行,列)是否为空,并且如果不是,则只输入if-test下的命令?

抱歉提出这样一个基本问题。我似乎无法做到这一点做我想要的......

1 个答案:

答案 0 :(得分:1)

你的第二个条件是错的,你实际上在做 -

str(sheet.cell(row+2,col).value)!=None)

您正在将sheet.cell(row+2,col).value的结果转换为字符串,如果None str(sheet.cell(row+2,col).value)的结果是字符串'None',那么它永远不会等于{{ 1}},您永远不会从None获得None输出。这就是为什么它表现得好像条件永远不存在的原因。

你应该试试 -

str()

在这种新情况下,if (re.match(r'F\d-\w*',str(sheet.cell(row,col).value))) and sheet.cell(row+2,col).value not in [None, '']: sheet.cell(row+2,col).value正好适用于None