如何在 openpyxl 中使用 if 语句停止打印
How to stop printing using if statement with 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 return <type 'unicode'>
你知道怎么做吗?
谢谢
听起来你的测试失败了。 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):
我正在从 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 return <type 'unicode'>
你知道怎么做吗?
谢谢
听起来你的测试失败了。 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):