Подтвердить что ты не робот

Копирование листа с помощью xlwings и python

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

Я использую версию 0.11.4 xlwings. Если такая функциональность не встроена, я могу выйти за пределы xlwings и использовать функции pywin32 для достижения этой цели.

4b9b3361

Ответ 1

Это не оставленный без ответа вопрос! ;-)

Ответ 2

Покопавшись в нескольких местах и прочитав документацию по pywin32, я нашел решение скопировать лист:

import xlwings as xw
wb = xw.Book('filename.xlsx')
sheet = wb.sheets['Sheet1']

#copy within the same sheet
sheet.api.Copy(Before=sheet.api)

#copy to a new workbook
sheet.api.Copy()

#copy a third time at the beginning of the sheets
sheet2 = wb.sheets['sheet1 (2)']
sheet.api.Copy(Before=sheet2.api)

#copy to an existing workbook by putting it in front of a worksheet object
sheet.api.Copy(before=existingSheet.api)

Это выходит за рамки нативной функциональности, предоставляемой xlwings. Поскольку xlwings является оболочкой для pywin32, .api() предоставляет доступ к тем функциям pywin32, которые не документированы в xlwings.

Также обратите внимание, что команда "После" не работает на рабочем листе; откроется новая рабочая книга с копией листа. Это не должно представлять слишком большой проблемы, так как я считаю, что индексы могут быть переупорядочены при необходимости.