Понимание того, как работает метод добавления Worksheet из модуля openpyxl - PullRequest
1 голос
/ 03 июня 2019

Вот некоторый код:

from openpyxl import load_workbook

wb = load_workbook('myfile.xlsx')
ws = wb.active 
# data for filling Excel table
rows = (
   (88, 46, 57),
   (89, 38, 12),
   (23, 59, 78),
   (56, 21, 98),
   (24, 18, 43),
   (34, 15, 67)
)
for row in rows:
    ws.append(row)
wb.save('my_changed_file.xlsx')

После выполнения кода выше я ожидал увидеть таблицу Excel, заполненную из первой строки, но таблицу, заполненную из второй строки.

Почему метод append работает так?

1 Ответ

1 голос
/ 03 июня 2019

Это не совсем ошибка append. Каждая книга имеет по крайней мере одну строку и столбец, когда она начинается. У меня была похожая проблема некоторое время назад: Определите, является ли рабочий лист пустым в openpyxl . По мнению автора (Чарли Кларк), внутренние счетчики max_row и max_column всегда должны быть строго положительными, поэтому append всегда будет записывать во второй ряд.

Вы всегда можете установить ячейки в цикле, где вы управляете индексами, что очень похоже на то, что append делает для удобства в любом случае:

for r, row in enumerate(data, start=1):
    for c, value in enumerate(row, start=1):
        worksheet.cell(row=r, column=c).value = value

После заполнения A1, append будет работать точно так, как вы ожидаете.

...