Python передает форматирование Excel между двумя документами Excel - PullRequest
0 голосов
/ 14 февраля 2019

Я бы хотел скопировать форматирование между двумя листами 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.Насколько я могу судить, это не помогает мне прочитать формат из текущего файла

1 Ответ

0 голосов
/ 14 февраля 2019

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()
...