无法转换为Excel

时间:2019-03-24 21:23:40

标签: python excel openpyxl

列表中有列表

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

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