123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package xlsx
- import "strconv"
- // Several popular font names that can be used to create fonts
- const (
- Helvetica = "Helvetica"
- Baskerville = "Baskerville Old Face"
- TimesNewRoman = "Times New Roman"
- Bodoni = "Bodoni MT"
- GillSans = "Gill Sans MT"
- Courier = "Courier"
- )
- const (
- RGB_Light_Green = "FFC6EFCE"
- RGB_Dark_Green = "FF006100"
- RGB_Light_Red = "FFFFC7CE"
- RGB_Dark_Red = "FF9C0006"
- RGB_White = "00000000"
- RGB_Black = "FFFFFFFF"
- )
- const (
- Solid_Cell_Fill = "solid"
- )
- // Style is a high level structure intended to provide user access to
- // the contents of Style within an XLSX file.
- type Style struct {
- Border Border
- Fill Fill
- Font Font
- ApplyBorder bool
- ApplyFill bool
- ApplyFont bool
- ApplyAlignment bool
- Alignment Alignment
- NamedStyleIndex *int
- }
- // Return a new Style structure initialised with the default values.
- func NewStyle() *Style {
- return &Style{
- Alignment: *DefaultAlignment(),
- Border: *DefaultBorder(),
- Fill: *DefaultFill(),
- Font: *DefaultFont(),
- }
- }
- // Generate the underlying XLSX style elements that correspond to the Style.
- func (style *Style) makeXLSXStyleElements() (xFont xlsxFont, xFill xlsxFill, xBorder xlsxBorder, xCellXf xlsxXf) {
- xFont = xlsxFont{}
- xFill = xlsxFill{}
- xBorder = xlsxBorder{}
- xCellXf = xlsxXf{}
- xFont.Sz.Val = strconv.Itoa(style.Font.Size)
- xFont.Name.Val = style.Font.Name
- xFont.Family.Val = strconv.Itoa(style.Font.Family)
- xFont.Charset.Val = strconv.Itoa(style.Font.Charset)
- xFont.Color.RGB = style.Font.Color
- if style.Font.Bold {
- xFont.B = &xlsxVal{}
- } else {
- xFont.B = nil
- }
- if style.Font.Italic {
- xFont.I = &xlsxVal{}
- } else {
- xFont.I = nil
- }
- if style.Font.Underline {
- xFont.U = &xlsxVal{}
- } else {
- xFont.U = nil
- }
- xPatternFill := xlsxPatternFill{}
- xPatternFill.PatternType = style.Fill.PatternType
- xPatternFill.FgColor.RGB = style.Fill.FgColor
- xPatternFill.BgColor.RGB = style.Fill.BgColor
- xFill.PatternFill = xPatternFill
- xBorder.Left = xlsxLine{
- Style: style.Border.Left,
- Color: xlsxColor{RGB: style.Border.LeftColor},
- }
- xBorder.Right = xlsxLine{
- Style: style.Border.Right,
- Color: xlsxColor{RGB: style.Border.RightColor},
- }
- xBorder.Top = xlsxLine{
- Style: style.Border.Top,
- Color: xlsxColor{RGB: style.Border.TopColor},
- }
- xBorder.Bottom = xlsxLine{
- Style: style.Border.Bottom,
- Color: xlsxColor{RGB: style.Border.BottomColor},
- }
- xCellXf = makeXLSXCellElement()
- xCellXf.ApplyBorder = style.ApplyBorder
- xCellXf.ApplyFill = style.ApplyFill
- xCellXf.ApplyFont = style.ApplyFont
- xCellXf.ApplyAlignment = style.ApplyAlignment
- if style.NamedStyleIndex != nil {
- xCellXf.XfId = style.NamedStyleIndex
- }
- return
- }
- func makeXLSXCellElement() (xCellXf xlsxXf) {
- xCellXf.NumFmtId = 0
- return
- }
- // Border is a high level structure intended to provide user access to
- // the contents of Border Style within an Sheet.
- type Border struct {
- Left string
- LeftColor string
- Right string
- RightColor string
- Top string
- TopColor string
- Bottom string
- BottomColor string
- }
- func NewBorder(left, right, top, bottom string) *Border {
- return &Border{
- Left: left,
- Right: right,
- Top: top,
- Bottom: bottom,
- }
- }
- // Fill is a high level structure intended to provide user access to
- // the contents of background and foreground color index within an Sheet.
- type Fill struct {
- PatternType string
- BgColor string
- FgColor string
- }
- func NewFill(patternType, fgColor, bgColor string) *Fill {
- return &Fill{
- PatternType: patternType,
- FgColor: fgColor,
- BgColor: bgColor,
- }
- }
- type Font struct {
- Size int
- Name string
- Family int
- Charset int
- Color string
- Bold bool
- Italic bool
- Underline bool
- }
- func NewFont(size int, name string) *Font {
- return &Font{Size: size, Name: name}
- }
- type Alignment struct {
- Horizontal string
- Indent int
- ShrinkToFit bool
- TextRotation int
- Vertical string
- WrapText bool
- }
- var defaultFontSize = 12
- var defaultFontName = "Verdana"
- func SetDefaultFont(size int, name string) {
- defaultFontSize = size
- defaultFontName = name
- }
- func DefaultFont() *Font {
- return NewFont(defaultFontSize, defaultFontName)
- }
- func DefaultFill() *Fill {
- return NewFill("none", "", "")
- }
- func DefaultBorder() *Border {
- return NewBorder("none", "none", "none", "none")
- }
- func DefaultAlignment() *Alignment {
- return &Alignment{
- Horizontal: "general",
- Vertical: "bottom",
- }
- }
|