列表中有列表
label_list =
[['a'],
['a', 'b', 'c'],
['a', 'd'],
['a'],
['a'],
我要粘贴到Excel中的,但它一直显示错误:无法将[“ a”]转换为Excel
下面是我的示例代码:
我希望每个列表都从D列开始,D列中的一个元素超过1个-我希望该元素流到同一行的下一列。
label_row = 2
for label in label_list:
no_oflabels = len(label)
if no_oflabels == 1:
ws.cell(row=label_row, column=start_column+4).value = label
label_row += 1
else:
for element in label:
ws.cell(row=created_row, column=start_column+4).value = element
start_column += 1
答案 0 :(得分:3)
问题是,当您只有一个元素时,您不仅试图将元素插入到Excel工作表中,而且还尝试将整个列表插入。这两件事之间有细微的差别。您要插入的是label[0]
而不是label
,使该行显示为:
...
ws.cell(row=label_row, column=start_column+4).value = label[0]
...
但是,在编写代码时,这样做的作用远远超出了需要。对单个元素有特殊情况没有任何意义。用单个元素循环遍历列表是完全有效的。因此,运行else:
子句就足够了:
label_row = 2
for label in label_list:
no_oflabels = len(label)
for element in label:
ws.cell(row=created_row, column=start_column+4).value = element
start_column += 1
不过,我在您的代码中看到了另一个潜在的错误。我认为,您的意图是使行与同一列对齐。在这种情况下,您必须在每次内部循环运行之前重置start_column
,或者(可能更好)使用另一个偏移变量。这可以通过enumerate
完成,使您的代码看起来像(如果您确实想在start_column
上加4):
label_row = 2
for label in label_list:
no_oflabels = len(label)
for offset, element in enumerate(label):
ws.cell(row=created_row, column=start_column+4+offset).value = element