Я сохраняю фрейм данных pandas в формате Excel с pandas.ExcelWriter, форматируя некоторые ячейки красным цветом с помощью conditional_format.
Форматирование выполнено успешно, но я не могу прочитать информацию о форматировании обратно, используя openpyxl.load_workbook: когда я спрашиваю цвет ячейки, которую я закрасил, ответ всегда «Нет». Посмотрите код ниже, который печатает следующее (обратите внимание на «rgb = None» в последней строке):
Cell value: apple
Font info:
<openpyxl.styles.fonts.Font object>
Parameters:
name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, outline=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color object>
Parameters:
auto=None, tint=0.0, type='theme', theme=1, rgb=None, indexed=None, extend=None, sz=11.0, u=None, vertAlign=None, scheme='minor'
Кроме того, цвет ячейки кажется заблокированным (то есть я не могу изменить его вручную после сохранения Excel).
Есть ли способ исправить эти проблемы?
Большое спасибо заранее!
(NB. Я использую Python 3.5, pandas == 0.22.0, openpyxl == 2.6.2)
import pandas as pd
from openpyxl import load_workbook
# SAVING SAMPLE EXCEL FILE WITH ONE CELL COLORED IN RED
writer = pd.ExcelWriter('MyExcel.xlsx', engine = 'xlsxwriter')
df = pd.DataFrame(columns = ['FRUIT', 'ANIMAL'], data = [['apple', 'cow'], ['banana', 'cat'], ['pear', 'zebra']])
df.to_excel(writer, sheet_name = 'sheet_1', header = True, index = False)
fmt = writer.book.add_format({'font_color' : 'red'})
writer.sheets['sheet_1'].conditional_format('A2', {'type' : 'unique', 'format' : fmt})
writer.close()
# READING FORMATTING INFORMATION BACK
wb = load_workbook("MyExcel.xlsx", read_only = True)
ws = wb['sheet_1']
print("Cell value: {}\nFont info:\n{}".format(ws.cell(2,1).value, ws.cell(2,1).font))
wb.close()
*** ОБНОВЛЕНИЕ: изменение кода форматирования на
cell_format = writer.book.add_format()
cell_format.set_font_color('red')
writer.sheets['sheet_1'].write('A2', 'apple', cell_format)
решает проблему.