2017-07-17 19 views
1

私はこの基本的な疑問を持っていますが、周りに私の頭を取得することはできません。適切な値の割り当ては

prepared_data = ([1, '7303 ', 'product1'], [2, '7304 ', 'product2'], [3, '7534 ', 'product3'], [4, '7652 ', 'product4']) 

が、私は、これらの値を代入したいが、適切にループを配置する方法を取得することはできません。

for row_num in range(2, len(prepared_data)+2): 
    for index in range(len(prepared_data)): 
     wb2_ws1.cell(row=row_num, column=1).value = prepared_data[index][0] 
     wb2_ws1.cell(row=row_num, column=2).value = prepared_data[index][1] 
     wb2_ws1.cell(row=row_num, column=3).value = prepared_data[index][2] 
     wb2_ws1.cell(row=row_num, column=4).value = 'John' 

プログラムは、2番目の行のセルに入力する必要があります。しかし、それは常に前にすべての値を上書きします。助けてくれてありがとう

答えて

1

私が正しく理解すれば、row_numprepared_dataの関数であるところで、ただ一つのforループがほしいと思うだけです。適切な開始値でenumerateを使用して、その関数を暗黙的にすることができます。あなたのような何かがしたいよう

for row_num, (some_int, some_str, some_label) in enumerate(prepared_data, start=2): 
    wb2_ws1.cell(row=row_num, column=1).value = some_int 
    wb2_ws1.cell(row=row_num, column=2).value = some_str 
    wb2_ws1.cell(row=row_num, column=3).value = some_label 
    wb2_ws1.cell(row=row_num, column=4).value = 'John' 
+0

ありがとうございました。私はあなたがそのような両方の値をループできることを知らなかった – neptunereach

0

に見えます:あなたは、常に最初の行を取得しますので、あなたの行番号が増加している一方で、

1|2|3 
    7303|7304|7354 
    product1|product2|product3 

をしかし、あなたのindexは、各行にリセットされます。

これを行うには2つの方法があります。

for col_num, col in enumerate(prepared_data): 
    for row_num, value in enumerate(col, 2): 
     ws.cell(row=row_num, column=col_num, value=value) 

それとも、あなたがちょうどappend()あなたのシートにすることができるようにメンバーを転置するためにあなたのリストにzip()を使用する:あなたは直接コラムを書くのいずれか。これは読者の練習として残されています!

関連する問題