Python передает форматирование excel между двумя документами Excel

Я хотел бы скопировать форматирование между двумя листами Excel в python.

Вот ситуация:

У меня есть сценарий, который эффективно "изменяет" (т.е. перезаписывает) файл excel, открывая его с помощью pd.ExcelWriter, а затем обновляет значения в строках. Наконец, файл перезаписывается с помощью ExcelWriter.

Файл Excel распечатывается/распространяется/читается людьми между обновлениями, выполняемыми кодом. Люди будут делать такие вещи, как изменение форматирования чисел, включение/выключение переноса слов и изменение ширины столбцов.

Моя цель - обновления кода должны изменять только содержимое файла, а не форматирование столбцов.

Есть ли способ читать/сохранять/записывать формат листа в python, чтобы выходной файл имел то же форматирование столбца, что и входной файл?

Вот основная идея того, чем я сейчас занимаюсь:

df_in= pd.read_excel("myfile.xlsx")    
# Here is where I'd like to read in format of the first sheet of this file
xlwriter = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter')
df_out = do_update(df_in)
df_out.to_excel(xlwriter,'sheet1')
# Here is where I'd like to apply the format I read earlier to the sheet
xlwriter.save()

Примечание. Я играл с xlsxwriter.set_column и add_format. Насколько я могу судить, это не помогает мне читать формат из текущего файла.


person r b    schedule 14.02.2019    source источник


Ответы (1)


Pandas использует пакет xlrd для анализа документов Excel в DataFrames.

Совместимость между другими пакетами xlsx и xlrd может быть проблематичной, когда речь идет о структуре данных, используемой для представления информации о форматировании.

Я предлагаю использовать openpyxl в качестве движка при создании экземпляра pandas.ExcelWriter. Он поставляется с интероперабельными классами чтения и записи.

import pandas as pd
from openpyxl.styles.stylesheet import apply_stylesheet
from openpyxl.reader.excel import ExcelReader

xlreader = ExcelReader('myfile.xlsx', read_only=True)
xlwriter = pd.ExcelWriter('myfile.xlsx', engine='openpyxl')

df_in = pd.read_excel("myfile.xlsx")
df_out = do_update(df_in)
df_out.to_excel(xlwriter,'sheet1')

apply_stylesheet(xlreader.archive, xlwriter.book)

xlwriter.save()
person Oluwafemi Sule    schedule 14.02.2019