установить разные цвета bg_color для разных столбцов в xlsxwriter python - PullRequest
1 голос
/ 06 августа 2020

Я хочу установить разные цвета заливки фона для разных столбцов, но получаю не так, как ожидалось.

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

я получаю:

the output i am getting

what i expect to get:

результат, который я ожидаю

1 Ответ

1 голос
/ 07 августа 2020

Формат в XlsxWriter «применяется к ячейке не в ее текущем состоянии, а в ее конечном состоянии» (см. Этот раздел документации ). Итак, в вашем примере создается только один уникальный формат с последним примененным цветом.

Вы можете исправить это, создав новый формат в l oop:

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

Вывод :

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...