Условное форматирование с помощью pandas.ExcelWriter: невозможно изменить формат вручную и прочитать формат обратно с помощью openpyxl - PullRequest
0 голосов
/ 08 мая 2019

Я сохраняю фрейм данных 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)

решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...