Has anybody implemented alternating row color while generating excel using xlsxwriter in Python3?
data_format = workbook.add_format(
{
\'bg_color\':
I think this is cleaner - if just want fill-in the cells with two-colors alternation
import xlsxwriter
workbook = xlsxwriter.Workbook('sample.xlsx')
worksheet = workbook.add_worksheet()
bg_format1 = workbook.add_format({'bg_color': '#78B0DE'}) # blue cell background color
bg_format2 = workbook.add_format({'bg_color': '#FFFFFF'}) # white cell background color
for i in range(10): # integer odd-even alternation
worksheet.set_row(i, cell_format=(bg_format1 if i%2==0 else bg_format2))
# (or instead) if you want write and paint at once
# worksheet.write(i, 0, "sample cell text", (bg_format1 if i%2==0 else bg_format2))
workbook.close()
There is nothing stopping you from setting the formats manually as follows. A context manager is used to automatically close the workbook afterwards.
import xlsxwriter
with xlsxwriter.Workbook('hello.xlsx') as workbook:
worksheet = workbook.add_worksheet()
data_format1 = workbook.add_format({'bg_color': '#FFC7CE'})
data_format2 = workbook.add_format({'bg_color': '#00C7CE'})
for row in range(0, 10, 2):
worksheet.set_row(row, cell_format=data_format1)
worksheet.set_row(row + 1, cell_format=data_format2)
worksheet.write(row, 0, "Hello")
worksheet.write(row + 1, 0, "world")
This would give you output looking as follows:
To apply this to a list of data, you could use the following approach. This also shows how it could be extended to use additional formats:
import xlsxwriter
from itertools import cycle
data = ["Row 1", "Row 2", "Row 3", "Row 4", "Row 5", "Row 6"]
with xlsxwriter.Workbook('hello.xlsx') as workbook:
data_format1 = workbook.add_format({'bg_color': '#EEEEEE'})
data_format2 = workbook.add_format({'bg_color': '#DDDDDD'})
data_format3 = workbook.add_format({'bg_color': '#CCCCCC'})
formats = cycle([data_format1, data_format2, data_format3])
worksheet = workbook.add_worksheet()
for row, value in enumerate(data):
data_format = next(formats)
worksheet.set_row(row, cell_format=data_format)
worksheet.write(row, 0, value)