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