2017-07-17 62 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' 

程序應該填寫第二行的單元格。但它總是覆蓋之前的所有值。感謝您的幫助

回答

1

如果我理解正確,您只需要一個for循環,其中row_numprepared_data索引的函數。您可以通過使用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是各行中重置,所以你總是得到的第一行。

有兩種方法可以做到這一點:要麼你直接寫列:

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) 

或者你用你的zip()名單上調換成員,使你可以append()你的表。這是作爲練習給讀者的!