Скопируйте весь лист с помощью openpyxl

Кто-нибудь может привести пример, как скопироватьвесь лист со стилями (из строк и столбцов) на второй лист в той же книге? (в новой книге также будет возможно)

Спасибо.

PS: я пытался сделать глубокую копию, но это не удалось сохранить измененные ячейки данных.
Цель: я пытаюсь заполнить некоторые листы моими данными, и первый лист - это мой шаблон.

Мне удалось скопировать значения, но только некоторые стили. Я использую последнюю версию openpyxl, поэтому, пожалуйста, не 1.x методы.

5 ответов

Решение

Версия 2.4 позволит вам сделать это: copy_worksheet

>>> source = wb.active
>>> target = wb.copy_worksheet(source)

Для более старых вы можете скопировать исходный код отсюда

ОБНОВЛЕНИЕ: Вы не можете просто привить этот код в более старые версии библиотеки

Вы не можете сделать это легко. Лучший подход, вероятно, тот, который описан в ошибке 171

У меня такая же проблема. Я решил использовать копию вместо Deepcopy. Я нашел решение на этом сайте

Я надеюсь, что это работает для вас!

Обратите внимание, чтоcopy_worksheetметод не копирует проверки данных . Вы можете сделать это вручную, используя openpyxladd_data_validation. Полный рабочий пример:

      # Copy worksheet
workbook = openpyxl.load_workbook(source_excel)
sheet_to_copy = workbook[sheet_name]
new_sheet = workbook.copy_worksheet(sheet_to_copy)
new_sheet.title = new_sheet_name

# Copy data validations
for data_validation in sheet_to_copy.data_validations.dataValidation:
    new_sheet.add_data_validation(data_validation)

# Save result
workbook.save(source_excel)

Что касается ссылок на репозиторий Openpyxl в ответах @charlie-clark и @sam, то они больше не работают, поскольку репозиторий был перемещен из Bitbucket в Gitlab.

Обновленная ссылка на выпуск 171: https://foss.heptapod.net/openpyxl/openpyxl/-/issues/171 .

Другие вопросы по тегам