Alternating row color using xlsxwriter in Python 3

前端 未结 2 1965
孤街浪徒
孤街浪徒 2021-02-20 03:36

Has anybody implemented alternating row color while generating excel using xlsxwriter in Python3?

data_format = workbook.add_format(
    {
        \'bg_color\':          


        
相关标签:
2条回答
  • 2021-02-20 03:46

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

    0 讨论(0)
  • 2021-02-20 04:00

    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)
    

    0 讨论(0)
提交回复
热议问题