为 xlsxwriter python 中的不同列设置不同的 bg_color

set different bg_color for different columns in xlsxwriter python

我想为不同的列设置不同的背景填充颜色,但没有达到预期效果。

import xlsxwriter 

workbook = xlsxwriter.Workbook('Example5.xlsx') 
worksheet = workbook.add_worksheet() 
bg_format = workbook.add_format()
colors = ['green', 'cyan', 'magenta']
content = ["A", "B", "C", "D"]
for i in range(5):
    bg_format.set_bg_color(colors[i % 3])
    print(colors[i % 3])
    worksheet.write_column(1, i, content, cell_format=bg_format)
workbook.close()

我得到的是:

我期望得到的:

XlsxWriter 中的一种格式“应用于未处于当前状态但处于最终状态的单元格”(请参阅​​此 section of the docs)。因此,在您的示例中,只创建了一种独特的格式,并且具有最后应用的颜色。

您可以通过在循环中创建新格式来解决此问题:

for i in range(5):
    bg_format = workbook.add_format()
    bg_format.set_bg_color(colors[i % 3])
    print(colors[i % 3])
    worksheet.write_column(1, i, content, cell_format=bg_format)

但是,对于大量迭代而言,这可能效率低下。一种更有效的方法是为您需要的每种颜色类型创建一个独特的格式并重复使用它们。像这样:

import xlsxwriter 

workbook = xlsxwriter.Workbook('Example5.xlsx') 
worksheet = workbook.add_worksheet() 

green_format   = workbook.add_format({'bg_color': 'green'})
cyan_format    = workbook.add_format({'bg_color': 'cyan'})
magenta_format = workbook.add_format({'bg_color': 'magenta'})

bg_formats = [green_format, cyan_format, magenta_format]
colors     = ['green', 'cyan', 'magenta']
content    = ["A", "B", "C", "D"]

for i in range(5):
    bg_format = bg_formats[i % 3]
    print(colors[i % 3])
    worksheet.write_column(1, i, content, cell_format=bg_format)

workbook.close()

输出: