У меня есть код, который создает файл Excel с именем file_A
с использованием XlsxWriter. Пользователи прислали мне файл Excel с именем file_b
, в котором есть только одна вкладка с именем tab_b
. Они хотят, чтобы tab_b
было добавлено к file_A
. Это tab_b
включает в себя много форматирования (некоторые из которых, я считаю, подпадают под «богатое» форматирование »), которые я бы предпочел не кодировать жестко в кодовую базу.
Есть ли способ загрузить tab_b
в базу кода в виде объекта с вкладками? Затем я мог бы добавить эту вкладку к file_A
, и все форматирование и жесткое кодирование будут инкапсулированы в объекте вкладки.
Мы уже используем XlsxWriter и openpyxl в нашей кодовой базе, но я не знаю, были ли они действительно созданы для такого рода вещей. Я открыт для других модулей, если это необходимо, но он должен быть Python-совместимым.
Пример кода того, как мы сейчас создаем file_A
выглядит следующим образом:
writer = pd.ExcelWriter(output_file_path, engine='xlsxwriter')
someDataFrame.to_excel(writer, sheet_name='PreExisting_Tab')
writer.save()
В идеале, я надеюсь выяснить, есть ли реальный код для следующего псевдокода ниже:
writer = pd.ExcelWriter(output_file_path, engine='xlsxwriter')
someDataFrame.to_excel(writer, sheet_name='PreExisting_Tab')
tab_b = readTabWithFormattingIntoPython("filePathToFile_B")
tab_b.to_Excel(writer,sheet_name='tab_b')
writer.save()
Этот снимок экрана ниже показывает tab_b внутри file_b.
ОБНОВЛЕНИЕ Спасибо, @DeepSpace, за то, что привлекли мое внимание к StyleFrame. Это выглядит многообещающе, но моя первоначальная попытка доказательства концепции не удалась. Вот что я попробовал (кажется, что он достаточно похож на код в вашем примере, но я не уверен, почему он не работает):
from StyleFrame import StyleFrame
writer = pd.ExcelWriter(output_file_path, engine='openpyxl')
tab_to_convert= StyleFrame.read_excel(file_B_file_path, read_style=True)
tab_to_convert.to_excel(writer)
writer.save()
Результатом приведенного выше кода является то, что файл Excel создается на одном листе без данных или форматирования из файла, который он должен был прочитать. В ячейке A1 указано: «Этот лист содержит XML-данные FactSet для использования с кодами этой книги = FDS. Изменение содержимого листа может повредить функциональность wrokbook = FDS».
Не уверен, что именно поэтому он не работает, но мне пришлось указать при создании писателя "engine = 'openpyxl'". Если я не указал это, он попытался использовать XlsxWriter и потерпел неудачу из-за AttributeError: у объекта «Рабочая книга» нет атрибута «get_sheet_by_name»
2-е ОБНОВЛЕНИЕ StyleFrame закончил работу. См. Комментарии ниже в ответе @ DeepSpace.