Индекс списка вне диапазона Openpyxl - PullRequest
1 голос
/ 12 апреля 2019

Я хочу автоматизировать написание листа Excel и, используя openpyxl, я могу записать формулы в ячейку столбцов до «N», но, поскольку я пытаюсь сделать то же самое для столбца «O», я получаю ошибку индекса.

Я попытался добавить столбцы с помощью Insert_cols, но он показывает мне "имя 'insert_cols' не определено", и я не уверен, что это решит мою проблему.

for row, cellObj in enumerate(list(sheet.columns)[14]):
     b=row+1
     c=row+14
     print (cellObj,b,c)
     n = '=AVERAGE(J%d:J%d)' % (b, c)
     # print n # check that n gets assigned correct string value
     cellObj.value = n
IndexError                                Traceback (most recent call last)
<ipython-input-32-ab8bd56d638c> in <module>
----> 1 for row, cellObj in enumerate(list(sheet.columns)[14]):
      2          b=row+1
      3          c=row+14
      4          print (cellObj,b,c)
      5          n = '=AVERAGE(J%d:J%d)' % (b, c)

IndexError: list index out of range

Я ожидалчтобы записать его в столбец «O», но он показывает ошибку индекса.

--- Update

wbsheet.active()
sheet['Z7'] = '= SUM(A1:A5)'

Я передал случайное значение в ячейку Z7, как показано вышепосле этого список (sheet.columns) состоит из столбцов, перечисленных в столбцах, пока Z не может объяснить, что здесь происходит, и если есть способ объявить количество столбцов, которое мне понадобится, вместо использования хака.

1 Ответ

0 голосов
/ 12 апреля 2019

Проблема в том, как вы определяете свой список:

list(sheet.columns)[14]

Это преобразует sheet.columns в список, но [14] даст вам только элемент списка с индексом 14.

Будет ли следующее работать для вашей реализации?

list(sheet.columns)

Таким образом ваш цикл for получает фактический список столбцов, с которыми он может работать лучше.

...