Go语言excelize包-06-样式设置(样式设置、区间使用样式、行使用样式、列使用样式)

1. 样式设置

1.1 创建样式

func (f *File) NewStyle(style interface{}) (int, error)

1.2 Style 结构体

type Style struct {
    Border        []Border    `json:"border"`
    Fill          Fill        `json:"fill"`
    Font          *Font       `json:"font"`
    Alignment     *Alignment  `json:"alignment"`
    Protection    *Protection `json:"protection"`
    NumFmt        int         `json:"number_format"`
    DecimalPlaces int         `json:"decimal_places"`
    CustomNumFmt  *string     `json:"custom_number_format"`
    Lang          string      `json:"lang"`
    NegRed        bool        `json:"negred"`
}
  • 成员说明
    • Border :边界
    • Fill :填充色
    • Font :字体
    • Alignment :对齐
    • Protection : ?
    • NumFmt :自定义格式
    • DecimalPlaces :小数点位置
    • CustomNumFmt :自定义数字格式
    • Lang : 谁的长度
    • NegRed :是否粗体?

几个常用成员(如BorderFill等)使用的结构体我们接下来将做说明:

1.2.1 Border结构体(边框设置)

结构体语法

type Border struct {
    Type  string `json:"type"`
    Color string `json:"color"`
    Style int    `json:"style"`
}
  • 成员说明
    • Type:边线方向
      • left
      • right
      • top
      • bottom
      • diagonalDown:左上到右下
      • diagonalUP:左下到右上
    • Color:颜色
    • Style:边线类型

Style边线类型效果如下:

image.png

完整示例

  • 代码
package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()

    styleId, err := f.NewStyle(&excelize.Style{
        Border: []excelize.Border{
            {Type: "left", Color: "000000", Style: 1},
            {Type: "top", Color: "000000", Style: 2},
            {Type: "bottom", Color: "000000", Style: 3},
            {Type: "right", Color: "000000", Style: 4},
            {Type: "diagonalDown", Color: "000000", Style: 5},
            {Type: "diagonalUp", Color: "A020F0", Style: 6},
        },
    })
    if err != nil {
        fmt.Println(err)
    }
    err = f.SetCellStyle("Sheet1", "B4", "D2", styleId)
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • 结果显示
image.png

注意:
diagonalDowndiagonalUp同时设置,如果二者样式不同,则diagonalDown会被diagonalUp的样式覆盖。

1.2.2 Fill结构体(填充设置)

结构体语法

type Fill struct {
    Type    string   `json:"type"`
    Pattern int      `json:"pattern"`
    Color   []string `json:"color"`
    Shading int      `json:"shading"`
}
  • 说明:
    • Type
      • gradient:渐变
      • pattern:填充图
    • Shading(Type为gradient时生效)
      • 1:横向填充
      • 2:纵向填充
      • 3:对角线向下填充
      • 4:对角线向上填充
      • 5:从内向外填充
    • Pattern(Type为pattern时生效)
      • 值从1~18(图片“Pattern值”)。
      • 1 表示纯色填充
    • Color
      • Type为gradient时,Color 有两个值,Pattern不生效
      • 切片只有一个成员时,Shading 不生效。

Pattern值:

image.png

完整示例(渐变填充)

  • 代码
package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()

    styleId, err := f.NewStyle(&excelize.Style{
        Border: []excelize.Border{
            {Type: "left", Color: "000000", Style: 2},
            {Type: "top", Color: "000000", Style: 2},
            {Type: "bottom", Color: "000000", Style: 2},
            {Type: "right", Color: "000000", Style: 2},
        },
        Fill:  excelize.Fill{
            Type: "gradient",
            Color: []string{"FFFF00", "00FF00"},
            Shading: 1,
        },

    })
    if err != nil {
        fmt.Println(err)
    }
    err = f.SetCellStyle("Sheet1", "B4", "D2", styleId)
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}

  • 结果显示
image.png

示例(纯色填充)

style, err := f.NewStyle(&excelize.Style{
    Fill: excelize.Fill{Type: "pattern", Color: []string{"FF0000"}, Pattern: 1},
})

1.2.3 Font结构体(字体设置)

结构体语法

type Font struct {
    Bold      bool    `json:"bold"`
    Italic    bool    `json:"italic"`
    Underline string  `json:"underline"`
    Family    string  `json:"family"`
    Size      float64 `json:"size"`
    Strike    bool    `json:"strike"`
    Color     string  `json:"color"`
    VertAlign string  `json:"vertAlign"`
}
  • 说明:
    • Bold:是否粗体
    • Italic:是否斜体
    • Underline: 下划线
      • single :单线
      • double:双线
    • Family:字体样式
    • Size:字体大小
    • Color:字体颜色

完整示例

  • 代码
package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()

    styleId, err := f.NewStyle(&excelize.Style{
        Font: &excelize.Font{
            Bold:   true,
            Italic: true,
            Family: "Times New Roman",
            Size:   36,
            Color:  "微软雅黑",
        },

    })
    if err != nil {
        fmt.Println(err)
    }
    f.SetCellStyle("Sheet1", "B4", "B4", styleId)
    f.SetCellValue("Sheet1","B4","LiuBei")
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • 结果显示
image.png

1.2.4 Alignment结构体(对齐方式)

结构体语法

type Alignment struct {
    Horizontal      string `json:"horizontal"`
    Indent          int    `json:"indent"`
    JustifyLastLine bool   `json:"justify_last_line"`
    ReadingOrder    uint64 `json:"reading_order"`
    RelativeIndent  int    `json:"relative_indent"`
    ShrinkToFit     bool   `json:"shrink_to_fit"`
    TextRotation    int    `json:"text_rotation"`
    Vertical        string `json:"vertical"`
    WrapText        bool   `json:"wrap_text"`
}
  • 说明
    • Horizontal:水平对齐
      • right
      • left
      • center
    • Indent:缩进
    • JustifyLastLine:两端对齐
    • ReadingOrder:文字方向
    • RelativeIndent:相对缩进
    • ShrinkToFit:缩小字体
    • TextRotation:文字旋转
    • Vertical:垂直对齐
      • top
      • bottom
      • center
    • WrapText:自动换行

完整示例

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()

    styleId, err := f.NewStyle(&excelize.Style{
        Alignment: &excelize.Alignment{
            Horizontal:      "center",
            Indent:          1,
            JustifyLastLine: true,
            ReadingOrder:    2,
            RelativeIndent:  1,
            ShrinkToFit:     true,
            TextRotation:    30,
            Vertical:        "top",
            WrapText:        true,
        },

    })
    if err != nil {
        fmt.Println(err)
    }
    f.SetCellStyle("Sheet1", "B4", "B4", styleId)
    f.SetCellValue("Sheet1","B4","LiuBei")
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}

结果显示

image.png

1.2.4 NumFmt编号(自定义格式)

参数

索引 类型
27 yyyy"年"m"月"
28 m"月"d"日"
29 m"月"d"日"
30 m-d-yy
31 yyyy"年"m"月"d"日"
32 h"时"mm"分"
33 h"时"mm"分"ss"秒"
34 上午/下午 h"时"mm"分"
35 上午/下午 h"时"mm"分"ss"秒
36 yyyy"年"m"月
50 yyyy"年"m"月
51 m"月"d"日
52 yyyy"年"m"月
53 m"月"d"日
54 m"月"d"日
55 上午/下午 h"时"mm"分
56 上午/下午 h"时"mm"分"ss"秒
57 yyyy"年"m"月
58 m"月"d"日"

完整示例

import (
    "fmt"
    "github.com/xuri/excelize/v2"
    "time"
)

func main() {
    f := excelize.NewFile()
    numFmt := "yyyy\"年\"m\"月\"d\"日\""
    styleId, err := f.NewStyle(&excelize.Style{
        CustomNumFmt: &numFmt,

    })
    if err != nil {
        fmt.Println(err)
    }
    f.SetCellStyle("Sheet1", "B4", "B4", styleId)
    f.SetCellValue("Sheet1","B4",time.Now())
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • 效果
image.png

1.2.5 CustomNumFmt编号(自定义数字)

参数

索引 类型
0 General
1 0
2 0.00
3 #,##0
4 #,##0.00
5 (#,##0_);(#,##0)
6 (#,##0_);[Red](#,##0)
7 (#,##0.00_);(#,##0.00)
8 (#,##0.00_);[Red](#,##0.00)
9 0%
10 0.00%
11 0.00E+00
12 # ?/?
13 # ??/??
14 m/d/yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM/PM
19 h:mm:ss AM/PM
20 h:mm
21 h:mm:ss
22 m/d/yy h:mm
.. ...
37 (#,##0_) ; (#,##0)
38 (#,##0_);Red
39 (#,##0.00_); (#,##0.00)
40 (#,##0.00_);Red
41 (* #,##0);(* (#,##0);(* "-");(@_)
42 (* #,##0_);_(* (#,##0);($* "-");(@_)
43 (* #,##0.00);(* (#,##0.00);(* "-"??);(@_)
44 (* #,##0.00_);_(* (#,##0.00);($* "-"??);(@_)
45 mm:ss
46 [h]:mm:ss
47 mm:ss.0
48 ##0.0E+0
49 @

完整示例(指定小数位)

显示为五位小数

import (
"fmt"
"github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    customNumFmt := "0.00000"
    styleId, err := f.NewStyle(&excelize.Style{
        CustomNumFmt: &customNumFmt,

    })
    if err != nil {
        fmt.Println(err)
    }
    f.SetCellStyle("Sheet1", "B4", "B4", styleId)
    f.SetCellValue("Sheet1","B4",1)
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • 效果
image.png

完整示例(显示节)

  • 代码

import (
"fmt"
"github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    customNumFmt := "#,##0"
    styleId, err := f.NewStyle(&excelize.Style{
        CustomNumFmt: &customNumFmt,

    })
    if err != nil {
        fmt.Println(err)
    }
    f.SetCellStyle("Sheet1", "B4", "B4", styleId)
    f.SetCellValue("Sheet1","B4",12345)
    if err = f.SaveAs("sanGuo.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • 效果
image.png

2. 样式使用

2.1 单元格使用样式

  • 语法
func (f *File) SetCellStyle(sheet string, hCell string, vCell string, styleID int) error

2.2 列使用样式

  • 语法
func (f *File) SetColStyle(sheet, columns string, styleID int) error
  • 语法示例
err = f.SetColStyle("Sheet1", "H", style)
err = f.SetColStyle("Sheet1", "C:F", style)

2.3 行使用样式

  • 语法
func (f *File) SetRowStyle(sheet string, start int, end int, styleID int) error
  • 语法示例
err = f.SetRowStyle("Sheet1", 1,3,style)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • 使用首先需要了解他的工作原理 1.POI结构与常用类 (1)创建Workbook和Sheet (2)创建单元格 (...
    长城ol阅读 8,422评论 2 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 转至:https://blog.51cto.com/dbaspace/2050922 DAX函数大全 针对Powe...
    夏沬沬阅读 26,078评论 0 7
  • 第六章:Layouts layout 是 logback 的组件,负责将日志事件转换为字符串。Layout 接口中...
    ChinaXieShuai阅读 1,485评论 0 0
  • 什么是Vue.js Vue.js是目前最火的一个前端框架,React是最流行的一个前端框架,(React除了开发网...
    EEEEsun阅读 627评论 0 1