2017-02-01 12 views
0

空の行が見つかるまで、Excel文書の各行を検索するスクリプトがあります。私の問題は、関数を呼び出して空の行(スクリプトの目的を破る)に達するまでの時間を正確に計算することなく、行を移動させることができないということです。 Excel検索関数をループ内でループしようとすると、IndexErrorが得られます。私はグローバル変数のブール値に基づいて元の関数の外に別の関数を作成しようとしましたが、同じ問題がありました(したがって、不完全な変数と空の変数)誰かが私が間違っていることを理解するのを助けてくれますか?Excelの検索

import xlrd 
workbook = xlrd.open_workbook('example.xls') 
sheet_names = workbook.sheet_names() 

global incomplete 
global empty 
global nextrow 
global counter 
incomplete = False 
empty = False 
counter = 0 
def excelreader(): 
    for sheet_name in sheet_names: 
     sheet = workbook.sheet_by_name('A Test Sheet')  
     global counter 
     try: 
      row_values = sheet.row_values(counter) 
      counter += 1 
      if '' in row_values: 
       global incomplete 
       incomplete = True 
       print incomplete 
     except IndexError: 
      print'IndexError' 




def exceliterator(): 
    if incomplete is False: 
     excelreader() 

excelreader() 
excelreader() 
excelreader() 

答えて

0

ループを終了するには、例外や関数の定義は必要ありません。最も簡単な方法:キーワードbreak

import xlrd 
workbook = xlrd.open_workbook('test.xls') 
sheet_names = workbook.sheet_names() 

incomplete_line = False 

for sheet_name in sheet_names: 
    sheet = workbook.sheet_by_name(sheet_name) 
    for row_idx in range(0, sheet.nrows): 
     row_values = sheet.row_values(row_idx) 
     if '' in row_values: 
      print "Incomplete line in sheet", sheet_name, "at line", row_idx+1 
      incomplete_line = True 
      break 
    if incomplete_line: 
     break