Golang操作Excel的模块Excelize学习总结-工具函数
package main
import (
"fmt"
"/xuri/excelize/v2"
)
func main() {
// 打开已存在的文件
wb, err := excelize.OpenFile("../excel_files/TMP_06.xlsx")
if err != nil {
fmt.Println(err)
}
fmt.Printf(": %v\n", wb.SheetCount)
// 新建文件
file := excelize.NewFile()
fmt.Printf(": %v\n", file.SheetCount)
// 拆分单元格坐标
col, row, err := excelize.SplitCellName("AA10")
if err != nil {
fmt.Println(err)
}
fmt.Println(col, row)
// 通过行列名称组合单元格坐标
cell, err := excelize.JoinCellName(col, row)
if err != nil {
fmt.Println(err)
}
fmt.Printf("cell: %v\n", cell)
// 列名转索引
col_n, err := excelize.ColumnNameToNumber("AA")
if err != nil {
fmt.Println(err)
}
fmt.Printf("col_n: %v\n", col_n)
// 列索引转列名
col_nm, err := excelize.ColumnNumberToName(100)
if err != nil {
fmt.Println(err)
}
fmt.Printf("col_nm: %v\n", col_nm)
// 坐标字符串转索引 行,列的数字索引
coln, rown, err := excelize.CellNameToCoordinates("A1")
if err != nil {
fmt.Println(err)
}
fmt.Printf("rown: %v\n", rown)
fmt.Printf("coln: %v\n", coln)
// 行列索引转坐标字符串
cell_nm, err := excelize.CoordinatesToCellName(2, 2)
if err != nil {
fmt.Println(err)
}
fmt.Printf("cell_nm: %v\n", cell_nm)
cell_nm2, err := excelize.CoordinatesToCellName(2, 2, true)
if err != nil {
fmt.Println(err)
}
fmt.Printf("cell_nm2: %v\n", cell_nm2) // $C$3 绝对坐标
// 补充一些前面文档遗漏的
// 设置行样式
style_idx, 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":{
"size":12,
"color":"#000000",
"family":"仿宋",
"bold":true
},"fill":{
"type":"gradient",
"color":["#00aa00","#00aa00"],
"shading":1
},"alignment":{
"horizontal":"center",
"vertical":"center"
}
}`)
if err != nil {
fmt.Println("创建样式", err)
}
if err := wb.SetColStyle("Sheet1", "A:G", style_idx); err != nil {
fmt.Println(err)
}
// 设置列宽
if err := wb.SetColWidth("Sheet1", "A", "G", 18); err != nil {
fmt.Println(err)
}
// 设置行高
if err := wb.SetRowHeight("Sheet1", 1, 7); err != nil {
fmt.Println(err)
}
// 创建表格
sheet_idx := wb.NewSheet("Sheet2")
wb.SetActiveSheet(sheet_idx)
if err := wb.AddTable("Sheet2", "A1", "C10", ""); err != nil {
fmt.Println(err)
}
// 应用样式 table_style 引用excel中的样式
/*table_style 的取值范围
TableStyleLight1 - TableStyleLight21
TableStyleMedium1 - TableStyleMedium28
TableStyleDark1 - TableStyleDark11
*/
/*
show_row_stripes 是否奇偶行不同颜色显示
show_col_stripes 奇偶列
*/
if err := wb.AddTable("Sheet2", "F1", "H10", `{
"table_name":"table",
"table_style":"TableStyleMedium2",
"show_first_column":true,
"show_row_stripes":true
}`); err != nil {
fmt.Println(err)
}
// 设置筛选,在已有数据的基础上加上筛选
if err := wb.AutoFilter("Sheet2", "J6", "N20", ``); err != nil {
fmt.Println(err)
}
// 先设置列样式
idx, err := wb.NewStyle(`{"number_format":1}`)
if err != nil {
fmt.Println(err)
}
if err := wb.SetColStyle("Sheet1", "Q", idx); err != nil {
fmt.Println(err)
}
// 设置过滤条件 只是会设置筛选条件,但是并不会筛选
if err := wb.AutoFilter("Sheet1", "O1", "T6", `{"column":"Q","expression":"x >= 20 "}`); err != nil {
fmt.Println(err)
}
// 保存
wb.Save()
}