xlsxwriter условное форматирование всей строки

Я могу использовать условный формат для установки цвета фона ячейки, но я хочу установить фон всей строки в соответствии с одним текстовым значением ячейки.

Например:

import pandas as pd
import numpy as np
import xlsxwriter
import os

def main():
    xlsfilename = os.path.expanduser("~") + "/test.xls"
    writer = pd.ExcelWriter(xlsfilename,engine='xlsxwriter')
    create_sheet(writer)
    set_format(writer)
    writer.save()
    return

def create_sheet(writer):
    index = np.arange(1)
    df = pd.DataFrame(columns=["Col1","Col2","Col3"],index=index)
    index = 0
    df.ix[index] = ["completed","(1,2)","(1,3)"]
    index += 1
    df.ix[index] = ["pending","(2,2)","(2,3)"]
    index += 1
    df.ix[index] = ["discard","(3,2)","(3,3)"]
    index += 1
    df.to_excel(writer,sheet_name="MySheet",index=False)
    return

def set_format(writer):
    # Get the xlsxwriter objects from the dataframe writer object.
    workbook = writer.book
    worksheets = writer.sheets
    completed_fmt = workbook.add_format({
    'bold':     False,
    'border':   6,
    'align':    'center',
    'valign':   'vcenter',
    'bg_color': '#D7E4BC',
    })
    for item in worksheets:
        print item
        worksheet = worksheets[item]
        # Adjust the column width.
        worksheet.set_column('A:A',10)
        worksheet.set_column('B:B',10)
        worksheet.set_column('C:C',10)
        worksheet.data_validation('A1', {'validate': 'list',
                                  'source': ['completed', 'pending', 'discard']})
        worksheet.conditional_format('A1:A1000', {'type': 'text',
                                        'criteria': 'begins with',
                                        'value': 'completed',
                                        'format': completed_fmt})
    workbook.close()
    return

#-----------------------------------------#
if __name__ == "__main__":
    main()
#-----------------------------------------# 

Текущий код устанавливает фон только в том случае, если ячейка имеет текст «завершено». но я хочу, чтобы текст ячейки A был «завершен», а затем установил цвет фона A, B, C на одно и то же значение.

Текущий выход:

введите здесь описание изображения


person Community    schedule 01.02.2015    source источник


Ответы (2)


Просто измените условный формат, включив в него весь диапазон, и используйте тип 'formula' вместо 'text'.

worksheet.conditional_format('A1:C1000', {'type': 'formula',
                                          'criteria': '=LEFT($A1, 9)="completed"',
                                          'format': completed_fmt})

введите описание изображения здесь

person JaminSore    schedule 19.05.2016

Это не должно быть условием контекста excel, условие должно быть во всем диапазоне.

Поэтому передайте фактический фрейм данных (df в create_sheet), создав его перед функциями, а не в create_sheet.

Когда у вас есть данные в новом set_format (который имеет df в качестве аргумента), вы можете выполнить условие в контексте Python, а не в контексте Excel, и применить правильное форматирование.

person Reut Sharabani    schedule 01.02.2015
comment
Я хочу, чтобы после создания этого документа, если ячейка A была изменена на завершенную, тогда она динамически изменит цвет фона всей строки. Если я изменяю цвет во время записи данных, он должен быть статическим цветом, но не может измениться после того, как пользователь изменит содержимое в Excel. Не уверен, правильно ли я понимаю. - person ; 01.02.2015