使用xlsxwriter为行中包含的内容着色,但不将颜色锁定到该行号?

2024-06-25 23:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python和pandas和xlsxwriter模块来格式化动态生成的excel文件。我需要某些行被涂成黄色,这取决于一列的内容。这是我的代码(“data”是一个数据帧,其中每行代表一个人)。请查找指向我所说的相关代码的#注释:

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循环检查行是否在rsvp列中包含maybe,如果是,则在该行上使用黄色格式化对象。这很好,但是。。。你知道吗

假设第4行和第7行在我的excel表中被涂成黄色。现在,如果我选择一个列并按字母顺序或类似的方式对该列排序,黄色格式将保留在第4行和第7行中,而不是与需要保留的内容一起移动。你知道吗

因此,我的实现似乎用黄色格式永久地锁定了第4行和第7行,而我需要的是使它更具动态性:它应该与在“rsvp”列中包含“maybe”的行保持一致,无论我将它们移动到哪里。你知道吗

编辑:

好的,我用worksheet.set_row而不是worksheet.conditional_format修复了我的问题。但后来我遇到了一个问题,即颜色会与正确的行保持一致,而其他格式(如字体大小和文本换行)则不会,因此我还必须将它们包含在黄色格式对象的定义中。你知道吗


Tags: 代码format内容pandasfordata格式excel
1条回答
网友
1楼 · 发布于 2024-06-25 23:15:53

我想你不需要在结尾打圈。 假设您的“可能”条件在A列中,而您希望被着色为黄色的数据在B列中。 您只需编写不带循环的条件格式,如下所示:

worksheet.conditional_format('B1:B5', {'type': 'formula',
                                           'criteria': '=$A1="maybe"',
                                           'format': yellow})

相关问题 更多 >