我正在读取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'>
你知道怎么做吗?
由于
答案 0 :(得分:0)
听起来你的测试失败了。 Excel文件中的所有字符串都作为unicode对象返回,但"User:" == u"User:"
。也许您正在查看的单元格有一些在调试语句中不可见的空格。在这种情况下,在打印字符串print([Sub])
或者,看起来就是这种情况,您在Excel的基于1的索引和Python基于零的索引之间感到困惑。在您的代码中,要查看的第一个单元格将是C20
(ws.cell(20, 3)
),但rowNum[3]
实际上是D20
。
我还建议您尽量避免使用Python的range
以及max_column
和max_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):