Python — применить форматирование существующей книги к другой книге

Я относительно новичок в программировании на Python, и вот моя проблема: 1- Когда я обновляю данные существующего файла .xlsx (используя openpyxl), результатом является .xlsx, который теряет все предыдущее форматирование. Я также пробовал с .xls (используя xlwt и xlrd), но ничего не изменилось. 2- Итак, я решил сохранить этот неформатированный файл результата и применить все форматирование файла шаблона .xls(x).

Есть ли прямой способ сохранить форматирование на шаге 1? если нет, как я могу реализовать шаг 2?

P.S: я пытался обрабатывать стили с помощью xlutils.styles... но мне не удалось...

Спасибо за вашу помощь!


person user2269393    schedule 11.04.2013    source источник
comment
В настоящее время поддержка форматирования для пакетов Python, которые работают напрямую с файлами Excel (без самого Excel), довольно слаба. Если вы будете делать это на машине с установленным на ней Excel, лучше всего прямо сейчас (если вы хотите придерживаться Python) использовать что-то вроде pywin32 или pywinauto. Если вы открыты для вариантов, отличных от Python, VBScript на самом деле не так уж плох, и он уже включен в машину.   -  person John Y    schedule 24.04.2013


Ответы (1)


Вы можете взять формат ячейки с помощью xlrd и установить его как стиль ячейки, которую вы пишете в xlwt. Атрибут xf_index ячейки является экземпляром объекта XFStyle и может быть выгружен непосредственно в аргумент стиля метода write, например так:

import xlwt,xlrd
readbook = xlrd.open_workbook('book.xls', formatting_info=True)
readsheet = readbook.sheet_by_index(0)
cell = sheet.cell(0,0)
writebook = xlwt.Workbook()
writesheet = writebook.add_sheet('sheet1')
writesheet.write(0,0,'First Cell', cell.xf_index)

Оттуда вы можете выполнить итерацию, чтобы соответствовать формату каждой ячейки, или вы можете записать каждый формат в строки или столбцы, как показано здесь: https://github.com/python-excel/xlwt/blob/master/xlwt/examples/row_styles.py

person user2569332    schedule 08.08.2013