Не удается преобразовать в Excel - PullRequest
0 голосов
/ 25 марта 2019

У меня есть списки в списках

label_list =
[['a'],
 ['a', 'b', 'c'],
 ['a', 'd'],
 ['a'],
 ['a'],

, которые я хочу вставить в Excel, но постоянно отображается ошибка: Невозможно преобразовать ["a"] в Excel

Ниже приведен мой примеркод:

Я хочу, чтобы каждый список начинался со столбца 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 Ответ

3 голосов
/ 25 марта 2019

Проблема в том, что когда у вас есть только один элемент, вы пытаетесь вставить не только этот элемент в таблицу 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, что даст вам код, похожий на (если вы действительно хотите добавить 4 к своему start_column):

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
...