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

时间:2018-08-06 23:04:33

标签: python xlsxwriter

我有一个创建报告的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')并将其应用。

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

1 个答案:

答案 0 :(得分:1)

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()

预期输出:

Expected Output

相关问题