Golang操作Excel的模块Excelize学习总结-设置样式

时间:2025-03-08 07:54:11
package main import ( "fmt" "/xuri/excelize/v2" ) func main() { // wb := () wb, err := excelize.OpenFile("../excel_files/TMP_05.xlsx") if err != nil { fmt.Println(err) return } sheetName := wb.GetSheetName(wb.GetActiveSheetIndex()) sty_idx, 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", sty_idx); err != nil { fmt.Println(err) return } // 除了以Go语言的方式传参外,还支持JSON格式的传参 // 边框样式 border_sty, 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", border_sty); err != nil { fmt.Println(err) } // 字体样式 // 链接的字体样式 下划线 + 蓝色 font_link_sty, err := wb.NewStyle(`{"font":{"underline":"single","size":12,"color":"#0000FF","family":"仿宋"}}`) if err != nil { fmt.Println(err) } fmt.Println(font_link_sty) 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", font_link_sty); err != nil { fmt.Println(err) } styleIdx, err := wb.GetCellStyle(sheetName, "F6") if err != nil { fmt.Println(err) } fmt.Println(styleIdx) // 对齐方式 Al_style, err := wb.NewStyle(`{"alignment":{ "horizontal":"center", "vertical":"center" }}`) if err != nil { fmt.Println(err) } if err := wb.SetCellStyle(sheetName, "F6", "F6", Al_style); err != nil { fmt.Println(err) } // 多个样式设置在同一个单元格,后面的会覆盖前面的 link_sty, 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", link_sty); err != nil { fmt.Println(err) } if err := wb.SetCellValue(sheetName, "D11", "这是链接"); err != nil { fmt.Println(err) } if err := wb.SetCellHyperLink(sheetName, "D11", "", "External"); err != nil { fmt.Println(err) } wb.Save() // ("../excel_files/TMP_05.xlsx") }