如何使用openpyxl的if语句停止打印

时间:2016-06-25 11:14:33

标签: python-2.7 if-statement openpyxl

我正在读取excel工作簿中的值,并且当特定单元格的值等于字符串时,我正在尝试停止打印。这是我的代码

import openpyxl
wb = openpyxl.load_workbook('data.xlsx')

for sheet in wb.worksheets:
    nrows = sheet.max_row
    ncolumns = sheet.max_column
    for rowNum in range(20,sheet.max_row):
        Sub = sheet.cell(row=rowNum, column=3).value
        Unit = sheet.cell(row=rowNum, column=6).value
        Concentration = sheet.cell(row=rowNum, column=9).value
        com = rowNum[3]
        if Sub == "User:":
            pass
        else:
            print(Sub, Concentration, Unit)

问题是if语句不起作用。当我使用type(Sub)时,python返回<type 'unicode'>

你知道怎么做吗?

由于

1 个答案:

答案 0 :(得分:0)

听起来你的测试失败了。 Excel文件中的所有字符串都作为unicode对象返回,但"User:" == u"User:"。也许您正在查看的单元格有一些在调试语句中不可见的空格。在这种情况下,在打印字符串print([Sub])

时将字符串嵌入列表中非常有用

或者,看起来就是这种情况,您在Excel的基于1的索引和Python基于零的索引之间感到困惑。在您的代码中,要查看的第一个单元格将是C20ws.cell(20, 3)),但rowNum[3]实际上是D20

我还建议您尽量避免使用Python的range以及max_columnmax_row属性,除非您真的需要它们。在您的情况下,ws.get_squared_range()更有意义。或者,在openpyxl 2.4中,它允许指定一系列单元格的已知边缘。

for row in get_squared_range(ws.min_colum, 20, ws.max_column, ws.max_row):
    Sub = row[2].value # 3rd item
    Unit = row[5].value
    Concentration = row[8].value

在openpyxl 2.4 get_squared_range中可以替换:

for row in ws.iter_rows(min_row=20):