Styling

Style Structure

A Style has five optional components:

style := &werkbook.Style{
    Font:      &werkbook.Font{...},
    Fill:      &werkbook.Fill{...},
    Border:    &werkbook.Border{...},
    Alignment: &werkbook.Alignment{...},
    NumFmt:    "...",
}

Only set the fields you need — nil components are left unchanged.

Fonts

sheet.SetStyle("A1", &werkbook.Style{
    Font: &werkbook.Font{
        Name:      "Calibri",
        Size:      14,
        Bold:      true,
        Italic:    false,
        Underline: true,
        Color:     "FF0000", // red, 6-char RGB hex
    },
})

Fill Colors

Set a solid background fill:

sheet.SetStyle("B2", &werkbook.Style{
    Fill: &werkbook.Fill{
        Color: "FFFF00", // yellow
    },
})

Colors are 6-character RGB hex strings (without the # prefix).

Borders

Each side of a cell can have its own style and color:

sheet.SetStyle("C3", &werkbook.Style{
    Border: &werkbook.Border{
        Top:    werkbook.BorderSide{Style: werkbook.BorderThin, Color: "000000"},
        Bottom: werkbook.BorderSide{Style: werkbook.BorderMedium, Color: "000000"},
        Left:   werkbook.BorderSide{Style: werkbook.BorderThin, Color: "CCCCCC"},
        Right:  werkbook.BorderSide{Style: werkbook.BorderThin, Color: "CCCCCC"},
    },
})

Available border styles:

ConstantStyle
BorderNoneNo border
BorderThinThin line
BorderMediumMedium line
BorderThickThick line
BorderDashedDashed line
BorderDottedDotted line
BorderDoubleDouble line

Alignment

sheet.SetStyle("D4", &werkbook.Style{
    Alignment: &werkbook.Alignment{
        Horizontal: werkbook.HAlignCenter,
        Vertical:   werkbook.VAlignTop,
        WrapText:   true,
    },
})

Horizontal options: HAlignGeneral, HAlignLeft, HAlignCenter, HAlignRight

Vertical options: VAlignBottom, VAlignCenter, VAlignTop

Number Formats

Apply custom number formats using Excel format strings:

// Currency
sheet.SetStyle("E1", &werkbook.Style{NumFmt: "$#,##0.00"})

// Percentage
sheet.SetStyle("E2", &werkbook.Style{NumFmt: "0.00%"})

// Date
sheet.SetStyle("E3", &werkbook.Style{NumFmt: "yyyy-mm-dd"})

// Thousands separator
sheet.SetStyle("E4", &werkbook.Style{NumFmt: "#,##0"})

You can also use built-in format IDs with NumFmtID (0–163).

Range Styles

Apply a style to an entire range at once:

headerStyle := &werkbook.Style{
    Font: &werkbook.Font{Bold: true, Color: "FFFFFF"},
    Fill: &werkbook.Fill{Color: "333333"},
    Alignment: &werkbook.Alignment{Horizontal: werkbook.HAlignCenter},
}

sheet.SetRangeStyle("A1:D1", headerStyle)

Reading Styles

style, _ := sheet.GetStyle("A1")
if style != nil && style.Font != nil {
    fmt.Printf("Font: %s %.0fpt\n", style.Font.Name, style.Font.Size)
}

Full Example

// Style a header row
sheet.SetRangeStyle("A1:E1", &werkbook.Style{
    Font:      &werkbook.Font{Bold: true, Size: 12, Color: "FFFFFF"},
    Fill:      &werkbook.Fill{Color: "2B579A"},
    Alignment: &werkbook.Alignment{Horizontal: werkbook.HAlignCenter},
    Border: &werkbook.Border{
        Bottom: werkbook.BorderSide{
            Style: werkbook.BorderMedium,
            Color: "1A3A6B",
        },
    },
})

// Style currency column
for row := 2; row <= 10; row++ {
    cell := fmt.Sprintf("D%d", row)
    sheet.SetStyle(cell, &werkbook.Style{
        NumFmt:    "$#,##0.00",
        Alignment: &werkbook.Alignment{Horizontal: werkbook.HAlignRight},
    })
}