Xlsxwriter 根据 if 语句更改格式颜色

Xlsxwriter change format colour based on if statement

我有一个 python 创建报告的脚本。

我想将颜色 a 应用于 a 行,然后将颜色 b 应用于 b 行,... 我可以创建一个变量 formatA = workbook.add_format({'bg_color': 'red'})formatB = workbook.add_format({'bg_color': 'blue'}) 等等。

但是,我认为执行 format = workbook.add_format({'bg_color': 'red'}) 会更容易,然后当我遍历要使用的行时,执行 format.set_bg_color('blue') 并应用它。

但是,它不会更改背景颜色,只会将蓝色应用于每一行。

关于格式的 xlsxwriter 文档页面的修改格式部分很好地解释了这个问题 (link here)。本质上,它解释了不可能使用格式然后重新定义它以便稍后使用,因为格式应用于最终状态的单元格。

作为替代方案,或许可以考虑创建一个创建格式的函数。当您想要更改单元格颜色或添加到该函数的其他格式时,您可以根据需要调用此函数。

我在下面提供了一个示例,说明您可以如何执行此操作。

import pandas as pd

df = pd.DataFrame({'col_a': ['a','b','c'],
                  'col_b': [1,2,3]})



def format_function(bg_color = 'red'):
    global format
    format=workbook.add_format({
    'bg_color' : bg_color
    })                

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook=writer.book
worksheet = writer.sheets['Sheet1']



# Setting the format but not setting the row height.
format_function(bg_color = 'red')
worksheet.set_row(1, None, format)
format_function(bg_color = 'blue')
worksheet.set_row(2, None, format)
format_function(bg_color = 'pink')
worksheet.set_row(3, None, format)


writer.save()

预期输出: