Как добавить существующий лист в книгу с помощью xlrd, xlwt и xlutils

Если я правильно понимаю, метод add_sheet рабочей книги создает новый рабочий лист (и добавляет его в книгу). У меня есть существующий шаблон Excel (с одним форматированным листом, который служит базой для добавления информации), который я хотел бы скопировать с помощью xlutils и добавить его в новую книгу несколько раз, используя новые имена листов. Как мне достичь этого? Я просмотрел код, чтобы узнать, как добавить существующий лист в существующую книгу, но не нашел ничего подобного?

from xlrd import open_workbook
from xlutils.copy import copy
from xlwt import Workbook
rb = open_workbook('report3.xlt',formatting_info=True)
wb = copy(rb)
new_book = Workbook()
for distinct_employee in distinct_employees:
    w_sheet = wb.get_sheet(0)
    w_sheet.write(6,6,distinct_employee.name)
    # give the sheet a new name (distinct_employee.id_number)
    # add this sheet to new_book
book.save('all_employees.xls')

person chefsmart    schedule 30.03.2011    source источник
comment
Я думаю, вы можете сделать это с помощью pyexcelerator.sourceforge.net. Я думаю, что внутри исходного дерева был какой-то пример кода.   -  person Andreas Jung    schedule 30.03.2011
comment
Я оценивал xlwt + xlrd + xlutils и pyexcelerator и обратился к первому, поскольку pyexcelerator кажется почти заброшенным. Я просмотрю его код, чтобы посмотреть, смогу ли я что-нибудь найти.   -  person chefsmart    schedule 30.03.2011


Ответы (1)


Я узнал, что с помощью copy.deepcopy вы можете создать копию своих рабочих листов. Также с помощью атрибута _Workbook__worksheets вы можете установить список листов вашей книги

Используя ваш пример, у меня был бы следующий код:

from copy import deepcopy
from xlrd import open_workbook
from xlutils.copy import copy as copy
from xlwt import Workbook
rb = open_workbook('report3.xlt',formatting_info=True)
wb = copy(rb)
new_book = Workbook()

sheets = []
for distinct_employee in distinct_employees:
    w_sheet = deepcopy(wb.get_sheet(0))
    w_sheet.write(6,6,distinct_employee.name)

    # give the sheet a new name (distinct_employee.id_number)
    w_sheet.set_name(distinct_employee.name)

    # add w_sheet  to the sheet list
    sheets.append(w_sheet)

 # set the sheets of the workbook
 new_book._Workbook__worksheets = sheets
person ignacio.munizaga    schedule 14.01.2013
comment
ссылки на ячейки между листами не копируются в новую книгу - person deeshank; 20.01.2014