Я пишу некоторый код для обработки большого набора данных, который будет экспортироваться в Excel для работы с пользователями. Небольшая часть этого включает привнесение имен учетных записей клиентов и определенной информации о них из существующей электронной таблицы. Например:
Acc_no Name Product Notes
1234 Bush, George Large New customer
5678 Obama, Barack Medium
1357 Clinton, Bill Large At risk
2468 Carter, Jimmy Small May upgrade
В электронной таблице, из которой я импортирую, пользователь, возможно, выделил определенные ячейки для своих собственных целей (скажем, для продолжения в качестве примера). Я действительно хочу сохранить это форматирование.
Пока ничего не изменится в порядке счетов, и если я экспортирую данные обратно в тот же лист Excel (используя OpenPyXL), форматирование будет сохранено. Однако я ожидаю, что порядок аккаунтов изменится в процессе сбора данных. В этом случае форматирование будет там, но не на правильных аккаунтах.
Моя идея заключалась бы в том, чтобы как-то пометить цвет выделения данной ячейки при его импорте, сохранить его как переменную в моем DataFrame. Затем, когда я экспортирую его обратно, я могу создать условное форматирование, которое сохранит форматирование.
Есть идеи о том, как выполнить те или иные предложения? Я использую OpenPyXL, но мне не нужно, если есть лучший вариант там. Код в том виде, как он есть, ниже.
from win32com.shell import shell, shellcon
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import numpy as np
#Load position data from APX
filename = (shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)) + '\Accounts.xlsx'
#Create account summary df
acc_df = pd.read_excel(filename, sheet_name = 'Acc_sum', converters={'Code':str})
#Do some munging that you don't care about...
acc_df = acc_df.dropna(subset=['Product'])
export_df = acc_df
book = load_workbook(filename)
sheet = 'Acc_sum'
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
export_df.to_excel (writer, sheet, index=False)
writer.save()