forked from go/golangs_learn
VIVIMAN
2 years ago
3 changed files with 292 additions and 0 deletions
@ -0,0 +1,172 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
|
||||
|
"github.com/xuri/excelize/v2" |
||||
|
) |
||||
|
|
||||
|
func main() { |
||||
|
// wb := excelize.NewFile()
|
||||
|
wb, err := excelize.OpenFile("../excel_files/TMP_05.xlsx") |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
return |
||||
|
} |
||||
|
sheetName := wb.GetSheetName(wb.GetActiveSheetIndex()) |
||||
|
|
||||
|
styIdx, err := wb.NewStyle(&excelize.Style{ |
||||
|
Border: []excelize.Border{ |
||||
|
{ |
||||
|
Type: "right", // top bottom left right diagonalDown diagonalUp 中的一个
|
||||
|
Color: "#000000", // 十六进制的颜色编码
|
||||
|
Style: 2, // 0-13 有对应的样式
|
||||
|
}, |
||||
|
{ |
||||
|
Type: "left", |
||||
|
Color: "#000000", |
||||
|
Style: 2, |
||||
|
}, |
||||
|
{ |
||||
|
Type: "top", |
||||
|
Color: "#000000", |
||||
|
Style: 2, |
||||
|
}, |
||||
|
{ |
||||
|
Type: "bottom", |
||||
|
Color: "#000000", |
||||
|
Style: 2, |
||||
|
}, |
||||
|
}, Fill: excelize.Fill{ |
||||
|
Type: "gradient", // gradient 渐变色 pattern 填充图案
|
||||
|
// Pattern: 1, // 填充样式 当类型是 pattern 0-18 填充图案 1 实体填充
|
||||
|
// Color: []string{"#FF0000"}, // 当Type = pattern 时,只有一个
|
||||
|
Color: []string{"#00F700", "#00F700"}, |
||||
|
Shading: 1, // 类型是 gradient 使用 0-5 横向(每种颜色横向分布) 纵向 对角向上 对角向下 有外向内 由内向外
|
||||
|
}, Font: &excelize.Font{ |
||||
|
Bold: true, |
||||
|
// Italic: false,
|
||||
|
// Underline: "single",
|
||||
|
Size: 14, |
||||
|
Family: "宋体", |
||||
|
// Strike: true, // 删除线
|
||||
|
Color: "#0000FF", |
||||
|
}, Alignment: &excelize.Alignment{ |
||||
|
Horizontal: "center", // 水平对齐方式 center left right fill(填充) justify(两端对齐) centerContinuous(跨列居中) distributed(分散对齐)
|
||||
|
Vertical: "center", // 垂直对齐方式 center top justify distributed
|
||||
|
// Indent: 1, // 缩进 只要有值就变成了左对齐 + 缩进
|
||||
|
// TextRotation: 30, // 旋转
|
||||
|
// RelativeIndent: 10, // 好像没啥用
|
||||
|
// ReadingOrder: 0, // 不知道怎么设置
|
||||
|
// JustifyLastLine: true, // 两端分散对齐,只有 水平对齐 为 distributed 时 设置true 才有效
|
||||
|
// WrapText: true, // 自动换行
|
||||
|
// ShrinkToFit: true, // 缩小字体以填充单元格
|
||||
|
}, Protection: &excelize.Protection{ |
||||
|
Hidden: true, // 貌似没啥用
|
||||
|
Locked: true, // 貌似没啥用
|
||||
|
}, NumFmt: 0, // 内置的数字格式样式 0-638 常用的 0-58 配合lang使用,因为语言不同样式不同 具体的样式参照文档
|
||||
|
Lang: "zh-cn", // zh-cn 中文
|
||||
|
DecimalPlaces: 2, // 小数位数 只有NumFmt是 2-11 有效
|
||||
|
// CustomNumFmt: "",// 自定义样式 是指针,只能通过变量的方式
|
||||
|
NegRed: true, // 不知道具体的含义
|
||||
|
}) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellStyle(sheetName, "A1", "B3", styIdx); err != nil { |
||||
|
fmt.Println(err) |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// 除了以Go语言的方式传参外,还支持JSON格式的传参
|
||||
|
// 边框样式
|
||||
|
borderSty, err := wb.NewStyle(`{"border":[ |
||||
|
{"type":"top","color":"#000000","style":1}, |
||||
|
{"type":"left","color":"#000000","style":1}, |
||||
|
{"type":"right","color":"#000000","style":1}, |
||||
|
{"type":"bottom","color":"#000000","style":1} |
||||
|
]}`) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellStyle(sheetName, "D2", "G10", borderSty); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
// 字体样式
|
||||
|
// 链接的字体样式 下划线 + 蓝色
|
||||
|
fontLinkSty, err := wb.NewStyle(`{"font":{"underline":"single","size":12,"color":"#0000FF","family":"仿宋"}}`) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
fmt.Println(fontLinkSty) |
||||
|
if err := wb.SetCellValue(sheetName, "F6", "这是链接"); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellHyperLink(sheetName, "F6", "Sheet1!A1", "Location"); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellStyle(sheetName, "F6", "F6", fontLinkSty); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
styleIdx, err := wb.GetCellStyle(sheetName, "F6") |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
fmt.Println(styleIdx) |
||||
|
|
||||
|
// 对齐方式
|
||||
|
alStyle, err := wb.NewStyle(`{"alignment":{ |
||||
|
"horizontal":"center", |
||||
|
"vertical":"center" |
||||
|
}}`) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
if err := wb.SetCellStyle(sheetName, "F6", "F6", alStyle); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
// 多个样式设置在同一个单元格,后面的会覆盖前面的
|
||||
|
|
||||
|
linkSty, err := wb.NewStyle(`{ |
||||
|
"border":[ |
||||
|
{"type":"top","color":"#000000","style":1}, |
||||
|
{"type":"left","color":"#000000","style":1}, |
||||
|
{"type":"right","color":"#000000","style":1}, |
||||
|
{"type":"bottom","color":"#000000","style":1} |
||||
|
], |
||||
|
"font":{ |
||||
|
"underline":"single", |
||||
|
"size":12, |
||||
|
"color":"#0000FF", |
||||
|
"family":"仿宋" |
||||
|
}, |
||||
|
"alignment":{ |
||||
|
"horizontal":"center", |
||||
|
"vertical":"center" |
||||
|
} |
||||
|
}`) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
if err := wb.SetCellStyle(sheetName, "D11", "D11", linkSty); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellValue(sheetName, "D11", "这是链接"); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
|
||||
|
if err := wb.SetCellHyperLink(sheetName, "D11", "http://www.baidu.com", "External"); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
_ = wb.Save() |
||||
|
// wb.SaveAs("../excel_files/TMP_05.xlsx")
|
||||
|
} |
@ -0,0 +1,120 @@ |
|||||
|
## 设置样式 |
||||
|
|
||||
|
* 新建样式 |
||||
|
> func (f *File) NewStyle(style interface{}) (int, error) |
||||
|
|
||||
|
> 通过给定的样式格式 JSON 或结构体的指针创建样式并返回样式索引。请注意,颜色需要使用 RGB 色域代码表示。 |
||||
|
|
||||
|
* 设置样式 |
||||
|
> func (f *File) SetCellStyle(sheet, hcell, vcell string, styleID int) error |
||||
|
|
||||
|
* 样式结构体包含的设置项 |
||||
|
```go |
||||
|
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"` |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
* 边框 |
||||
|
```go |
||||
|
type Border struct { |
||||
|
Type string `json:"type"` // top bottom left right diagonalDown diagonalUp |
||||
|
Color string `json:"color"` // 常用的颜色字符串 以及 十六进制的颜色编 red #F8F8F8 |
||||
|
Style int `json:"style"` // 见下表 样式可以去文档上看 |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
| 索引 | 线条样式 | 线宽 | |
||||
|
| ------ | ------ | ------ | |
||||
|
| 0 | 无 | 0 | |
||||
|
| 1 | 连续线 | 1 | |
||||
|
| 2 | 连续线 | 2 | |
||||
|
| 3 | 短线 | 1 | |
||||
|
| 4 | 点线 | 1 | |
||||
|
| 5 | 连续线 | 3 | |
||||
|
| 6 | 双线 | 3 | |
||||
|
| 7 | 连续线 | 0 | |
||||
|
| 8 | 短线 | 2 | |
||||
|
| 9 | 短线与点间隔线 | 1 | |
||||
|
| 10| 短线与点间隔线 | 2 | |
||||
|
| 11| 短线与两个点一组重复线 | 1 | |
||||
|
| 12| 短线与两个点一组重复线 | 2 | |
||||
|
| 13| 斜线与点线 | 2 | |
||||
|
|
||||
|
* 填充 |
||||
|
```go |
||||
|
type Fill struct { |
||||
|
Type string `json:"type"` // gradient pattern |
||||
|
Pattern int `json:"pattern"` |
||||
|
Color []string `json:"color"` |
||||
|
Shading int `json:"shading"` |
||||
|
} |
||||
|
``` |
||||
|
> 填充有两种类型 即 Type 有两种选择 gradient -> 渐变色 pattern -> 填充图案 |
||||
|
当Type是 gradient 时,Shading 可以选择 0-5 分别代表标横向(每种颜色横向分布),纵向,纵向 对角向上 对角向下 有外向内 由内向外;此时的Color 切片中的颜色可以有多个,Pattern 可以忽略 |
||||
|
当Type是 pattern 时,Pattern 可选 0-18 其中 1是实体填充 ;Color 切片中只要一种;Shading可以不填 |
||||
|
只有上述两种组合,其他的组合都不显示填充颜色 |
||||
|
|
||||
|
* 字体 |
||||
|
```go |
||||
|
type Font struct { |
||||
|
Bold bool `json:"bold"` // 是否加粗 |
||||
|
Italic bool `json:"italic"` // 是否倾斜 |
||||
|
Underline string `json:"underline"` // single double |
||||
|
Family string `json:"family"` // 字体样式 |
||||
|
Size float64 `json:"size"` // 字体大小 |
||||
|
Strike bool `json:"strike"` // 删除线 |
||||
|
Color string `json:"color"` // 字体颜色 |
||||
|
} |
||||
|
``` |
||||
|
> 注意字体是指针类型的 |
||||
|
|
||||
|
* 保护 |
||||
|
```go |
||||
|
type Protection struct { |
||||
|
Hidden bool `json:"hidden"` |
||||
|
Locked bool `json:"locked"` |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
* 对齐 |
||||
|
```go |
||||
|
type Alignment struct { |
||||
|
Horizontal string `json:"horizontal"` // 水平对齐方式 |
||||
|
Indent int `json:"indent"` // 缩进 只要设置了值,就变成了左对齐 |
||||
|
JustifyLastLine bool `json:"justify_last_line"` // 两端分散对齐,只有在水平对齐选择 distributed 时起作用 |
||||
|
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"` // 自动换行 |
||||
|
} |
||||
|
``` |
||||
|
> 对齐方式也是指针类型 |
||||
|
|
||||
|
> 多个样式设置在同一个单元格,后面的会覆盖前面的 |
||||
|
> |
||||
|
> 推荐使用JSON字符串的方式创建 |
||||
|
|
||||
|
```go |
||||
|
alStyle, err := wb.NewStyle(`{"alignment":{ |
||||
|
"horizontal":"center", |
||||
|
"vertical":"center" |
||||
|
}}`) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
if err := wb.SetCellStyle(sheetName, "F6", "F6", alStyle); err != nil { |
||||
|
fmt.Println(err) |
||||
|
} |
||||
|
``` |
Loading…
Reference in new issue