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()
预期输出:
我有一个 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()
预期输出: