Скопируйте весь лист с помощью 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 .