Я использую python с модулями pandas и xlsxwriter для форматирования файла excel, который генерируется динамически.Мне нужно, чтобы определенные строки были окрашены в желтый цвет, в зависимости от содержимого одного столбца.Вот мой код («данные» - это DataFrame панды, где каждая строка представляет одного человека).Ищите комментарий #, который указывает на соответствующий код, о котором я говорю:
def format_excel(data):
writer = pd.ExcelWriter('InviteList.xlsx', engine='xlsxwriter')
data.style.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False, index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Styles
yellow = workbook.add_format({'bg_color': '#fdf2d0', 'border': 1, 'border_color': '#C0C0C0'})
# Hacky bypass of default header style that pandas imposes
for idx, val in enumerate(data.columns):
worksheet.write(0, idx, val)
# THIS IS THE RELEVANT CODE
for row, employee in data.iterrows():
if data.loc[row, 'rsvp'] == 'maybe':
worksheet.conditional_format(row + 1, 0, row + 1, 15, {'type': 'no_errors', 'format': yellow})
writer.save()
Таким образом, в основном цикл for проверяет, содержит ли строка значение «Maybe» в столбце «rsvp», иесли это так, использует желтый форматирующий объект в этой строке.Это работает отлично, ОДНАКО ...
Допустим, строки 4 и 7 окрашены в желтый цвет в моем листе Excel.Теперь, если я выберу столбец и отсортирую этот столбец в алфавитном порядке или что-то в этом роде, желтое форматирование ОСТАЕТСЯ в строках 4 и 7 вместо ПЕРЕМЕЩЕНИЯ вместе с содержимым, в котором оно должно остаться.
Так что, похоже, моя реализация навсегда блокирует строки 4 и 7 с желтым форматированием, когда мне нужно, чтобы он был более динамичным: он должен придерживаться строк, содержащих «может» в «rsvp»колонна, не важно куда я их перевожу.
РЕДАКТИРОВАТЬ:
Хорошо, я исправил мою проблему, используя worksheet.set_row
вместо worksheet.conditional_format
.Но затем у меня возникла проблема, когда цвет соответствовал правильной строке, а другие форматирования, такие как размер шрифта и перенос текста, не были, поэтому мне также пришлось включить их в определение моего желтого объекта формата.