Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2010 08:40:37

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

xlwt сохранение стилей при копировании и записи

Пытаюсь добавить колонку в существующий файл excel

from xlrd import open_workbook
from xlutils.copy import copy

rbook = open_workbook('reestr.xls', formatting_info = True)
rsheet = rbook.sheet_by_index(2)

wbook = copy(rbook)
wsheet = wbook.get_sheet(2)

for i in range(8,rsheet.nrows):
wsheet.write(i, 18, i)
При записи в ячейку, стиль который был там до записи (шрифт, заливка) стираются. Как сделать чтобы записать значение, а стиль остался каким был?



Офлайн

#2 Сен. 17, 2010 09:17:30

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

xlwt сохранение стилей при копировании и записи

наверное самый простой вариант - это посмотреть на код функции copy :)

У функции write есть параметр style, который задает стиль ячейки, Вам нужно просто передавать его в функцию.
Где его взять - тут несколько сложнее. книга (xlrd) имеет свойство xf_list - список стилей. Рабочий лист имеет функцию cell_xf_index(row, col), которая возвращает индекс стиля ячейки в списке xf_list, вот пожалуй и все :)



Офлайн

#3 Сен. 17, 2010 09:40:30

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

xlwt сохранение стилей при копировании и записи

Офлайн

#4 Май 26, 2011 12:49:48

unax
От:
Зарегистрирован: 2011-05-03
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

xlwt сохранение стилей при копировании и записи

Товарищи, а подскажите такое дело.
xf_list содержит объекты типа xlrd.formatting.XF
а при записи ячеек write(self, r, c, label=“”, style=Style.default_style) стиль задается через тип XFStyle.
Что то не могу понять какие отношения между классами XF и XFStyle?
А то просто же не получается скопировать стиль ячейки типа..(кусок кода для ясности)

       self.__out_document = xlrd.open_workbook(doc_file_path , on_demand=True , formatting_info=True )
...........
wd=copy(self.__out_document)
for var in self.__variables:
if var.exist:
locate=var.positions
for pos in locate:

sheet=wd.get_sheet(pos['z'])
sheet_source= self.__out_document.sheet_by_index(pos['z'])
st = self.__out_document.xf_list[ sheet_source.cell_xf_index(pos['x'],pos['y']) ] <---- из документа источника "источник стиля"
if sheet and st:
sheet.write(pos['x'],pos['y'], var.value.decode("utf-8"), st)
В примере по ссылке выше некая функция get_xlwt_style_list из getxlwtstylelist
что вот в ней интересно..



Офлайн

#5 Май 27, 2011 04:36:41

unax
От:
Зарегистрирован: 2011-05-03
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

xlwt сохранение стилей при копировании и записи

Раскурил. Вот тут можно посмотреть на начинку функции http://code.google.com/p/some-code-sheets/wiki/python_excel



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version