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