2017-07-09 23 views
-1

クイックランダウン;私は、列 "A"のすべてのセルを繰り返して、セルに使用されている色の値を出力しようとしています。これは最初のセルを反復処理するときに問題なく動作しますが、再試行すると次のエラーが発生します。型エラー:セルを反復処理するときのタプルのインデックス

Traceback (most recent call last): 
    File "C:\Users\Luke\Desktop\test.py", line 24, in <module> 
    main(sys.argv[1]) 
    File "C:\Users\Luke\Desktop\test.py", line 11, in main 
    color_dict[cell] = styles.colors.COLOR_INDEX[cell.fill.start_color.index] 
TypeError: tuple indices must be integers or slices, not str 

私は、これは、この1上の任意のポインタを発生し続ける理由について、失われたとわからないんですか?

コード:

import sys 
from openpyxl import load_workbook, styles 

def main(fileName): 
    color_dict = {} 
    workbook = load_workbook(fileName) 
    ltm = workbook.get_sheet_names()[7] 
    ws = workbook.get_sheet_by_name(ltm) 
    for row in ws.iter_rows("A{}:A{}".format(ws.min_row,ws.max_row)): 
     for cell in row: 
      color_dict[cell] = styles.colors.COLOR_INDEX[cell.fill.start_color.index] 


if __name__ == '__main__': 
    if len(sys.argv) < 2: 
     print("Bad Syntax") 
    main(sys.argv[1]) 
+1

インデックス変数がある時点で文字列になっているようです。コードをデバッグしてどこを見つけるか。 'color_dict'行の前にブレークポイント(または' print')を置き、変数を調べます。 @Carcigenicateに加えて – Carcigenicate

+0

を使用すると、タイプを与えるためにprint(type(cell))を使用することができます。 "1"のようなものが得られたら、キャストすることができます:int(cell) –

+0

おそらく、start_color.indexは色を表す16進値です。 –

答えて

1

styles.colors.COLOR_INDEX()パラメータとしての整数を受け入れながらcell.fill.start_color.indexが文字列であるため、あなたは型エラーを取得しています。 cell.fill.start_color.indexのタイプと内容を確認し、明示的にintに変換してください。

関連する問題