xlwt.write
принимает информацию стиля в качестве третьего аргумента. К сожалению, xlrd и xlwt используют два очень разных формата объекта XF. Таким образом, вы не можете напрямую копировать стиль ячейки из книги, прочитанной xlrd
, в книгу, созданную xlwt
.
Обойти является использование xlutils.XLWTWriter
, чтобы скопировать файл, а затем получить обратно информацию о стиле этого объекта, чтобы сохранить стиль ячейки будут обновлены.
Прежде всего, необходимо, что
патч
функция Джоном Мачин представлена в a very similar question:
from xlutils.filter import process,XLRDReader,XLWTWriter
#
# suggested patch by John Machin
# https://stackoverflow.com/a/5285650/2363712
#
def copy2(wb):
w = XLWTWriter()
process(
XLRDReader(wb,'unknown.xls'),
w
)
return w.output[0][1], w.style_list
Тогда в вас основной код:
import xlrd, xlutils
from xlrd import open_workbook
from xlutils.copy import copy
inBook = xlrd.open_workbook(r"/tmp/format_input.xls", formatting_info=True, on_demand=True)
inSheet = inBook.sheet_by_index(0)
# Copy the workbook, and get back the style
# information in the `xlwt` format
outBook, outStyle = copy2(inBook)
# Get the style of _the_ cell:
xf_index = inSheet.cell_xf_index(0, 0)
saved_style = outStyle[xf_index]
# Update the cell, using the saved style as third argument of `write`:
outBook.get_sheet(0).write(0,0,'changed!', saved_style)
outBook.save(r"/tmp/format_output.xls")
Sylvain Leroux - извините за поздний ответ. Это именно то, что мне нужно. Спасибо! – user1185790