2017-01-19 10 views
0

xlsx doドキュメントを読み込み、特定のレーンを見つけて領域を印刷しようとしていますが、レーンなしで印刷しません。また、 "None"が特定の列にある場合は、サイクルを中断してください。条件付きのPythonブレークサイクル

def some(): 
    for r in range(1, ws.max_row): 
     for c in range(1, ws.max_column): 
      db = ws.cell(row=r, column=c) 
      if db.value == 'this one': 
       for rows in ws.iter_rows(min_row=r + 1, min_col=c - 1, 
             max_row=r + 30, max_col=c): 
        for cell in rows: 
         if cell.value is None: 
          if column_index_from_string(db.column) == c: 
           return 
         else: 
          print(cell.value, end=" ") 
        print() 

このコードでは、1レーンしか戻ってこなかったため、先頭サイクルが中断されました。 出力: 1315テキスト
書式:https://drive.google.com/file/d/0B_bbUxPgcVESVGstWWRxV3k4emM/view。私はこの問題を解決できません。ネイティブエラーのために申し訳ありません。私は新しいPythonで、答えを探しています。

+0

Googleドライブ/ Dropboxを使用してExcelファイルを含めることができますか? – MYGz

+0

@UrielEliもし本当にここで質問されていた質問があれば、「誰も特定の列にいないときにもサイクルを中断します。なぜ私の答えが受け入れられなかったのですか?現在、私はちょうど引用した質問に答えると思っていたので、-1に投票しました。 – Cephlin

+0

@Cephlin私はなぜあなたがdownvotedされているのかわかりませんが、ここではそのような重複に答えるのではなく、それらを閉じないように、ほとんどの標準は、人々は完全な会話スレッドにリダイレクトされます。 – Uriel

答えて

0

サイクルがNoneであることを確認すると、戻るのではなく、breakと呼んで内部ループを終了し、その後に戻るロジックを持つことができます。 continueを使ってforループをスキップすることもできます。内部ループを分割する例については、以下を参照してください。

例;

for r in range(1, ws.max_row): 
    for c in range(1, ws.max_column): 
     db = ws.cell(row=r, column=c) 
     if db.value == 'My specific Value': 
      for rows in ws.iter_rows(min_row=r+1, min_col=c-1, max_row=r+30, max_col=c): 
       for cell in rows: 
        if cell.value is None: 
         if column_index_from_string(db.column) == c: 
          rtn = 1 
          break 
        else: 
         print(cell.value, end=" ") 
       print() 

return rtn 

ループの外側(ループのRレンジ)の抜け出しに基づいて第2実施例:

def print_while_cell_is_not_none(): 
    for r in range(1, ws.max_row): 
     for c in range(1, ws.max_column): 
      db = ws.cell(row=r, column=c) 
      if db.value == 'My specific Value': 
       for rows in ws.iter_rows(min_row=r + 1, min_col=c - 1, 
             max_row=r + 30, max_col=c): 
        for cell in rows: 
         if cell.value is None: 
          if column_index_from_string(db.column) == c: 
           return 
         else: 
          print(cell.value, end=" ") 

この第二の例では、全体を壊すこれはcell.valueNoneある場合for cell in rows:ループを停止しますループのためにfor r in rangeから抜け出します。

+0

これは投票されて以来、これは質問に答えないと思います。おそらく質問は、私には何が尋ねられているのかを理解するためのより多くの情報を必要とするかもしれないと思います。私が理解している限り、ループを壊す方法を尋ねていました。 – Cephlin

+0

可能であれば、私のコードで説明していただけますか? –

+0

@ IanJ-Vanが私の答えをあなたのために更新しました。あなたは何かを返す必要がある場合、あなたが何を返そうとしているのか把握しなければなりません。 – Cephlin