我有这个基本问题,但无法理解:
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'
程序应填写第二行的单元格。但它总是覆盖所有的值。谢谢你的帮助
答案 0 :(得分:1)
如果我理解正确,您只需要一个for
循环,其中row_num
是prepared_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'
答案 1 :(得分: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()
到您的工作表。这是留给读者的练习!