2016-06-25 6 views
0

Excelのブックから値を読み取っていますが、特定のセルの値が文字列と等しい場合に印刷を停止しようとしています。ここに私のコードですopenpyxlでif文を使用して印刷を中止する方法

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'>

どうやったらいいですか?

ありがとうございました

答えて

0

あなたのテストのようなサウンドは失敗しています。 Excelファイル内のすべての文字列はユニコードオブジェクトとして返されますが、"User:" == u"User:"です。おそらく、あなたが見ているセルには、デバッグステートメントでは見えない空白があります。この場合、文字列をリストに埋め込むことは便利ですprint([Sub])

また、Excelの1ベースのインデックス作成とPythonのゼロベースのインデックス作成が混乱しています。あなたがコードで見て最初のセルはC20ws.cell(20, 3))ですが、rowNum[3]は実際にはD20です。

本当に必要な場合を除き、Pythonのrangemax_columnmax_rowのプロパティを使用することをお勧めします。あなたの場合はws.get_squared_range()が理にかなっています。あるいは、openpyxl 2.4では、ある範囲のセルの既知の辺を指定することができます。 openpyxl 2.4 get_squared_range

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 

置き換えることができます。

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

+0

おかげで多くのことを。それは確かに空白だった – leelja

関連する問題