Go 操作 Excel 总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

func main() {
f, err := excelize.OpenFile("./HealthCheck.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
// Close the spreadsheet.
if err := f.Close(); err != nil {
fmt.Println("Excel 文件关闭失败: " + err.Error())
}
}()

// Get all the rows in the Sheet1.
rows, err := f.GetRows("监测点列表")
if err != nil || len(rows) == 0 {
fmt.Println("Excel 文件读取失败: " + err.Error())
return
}

for _, row := range rows[1:] {
// 在表格末尾有空格的时候,每一行实际的 row 并不等长
// 但是行首有空格并不会导致 row 长度变短
rowTmp := make([]string, 6)
for k, v := range row {
rowTmp[k] = v
}
fmt.Printf("%#v\n", row)
fmt.Printf("%#v\n", rowTmp)
}

fmt.Println("----------------------------")

r, _ := f.Rows("监测点列表")
for {
if r.Next() {
rst, _ := r.Columns()
fmt.Printf("%#v\n", rst)
} else {
break
}
}

fmt.Println("----------------------------")

// 检查行的存在性
visible1, _ := f.GetRowVisible("Sheet1", 2)
visible2, _ := f.GetRowVisible("代理列表", 2)
visible3, _ := f.GetRowVisible("代理列表", 10)
fmt.Println(visible1, visible2, visible3)

fmt.Println("----------------------------")
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

func main() {
f := excelize.NewFile()
// 修改默认的 Sheet1 命名
f.SetSheetName("Sheet1", "Test_Origin")

// Create a new sheet.
f.NewSheet("Test")

// 填充单位格
for i := 1; i <= 10; i++ {
f.SetCellValue("Test", "A"+strconv.Itoa(i), strconv.Itoa(i*100))
}

// 设置列宽,可一次设置等宽多列
f.SetColWidth("Test", "A", "H", 25)

// 设置行高
f.SetRowHeight("Test", 1, 100)

// 设置列表大纲模式
for i := 3; i <= 8; i++ {
f.SetRowOutlineLevel("Test", i, 1)
}

// 设置下拉选项
// 新建下拉数据验证数据结构,可以选空 allowBlank:true
dvRangeAgent := excelize.NewDataValidation(true)
// 此处设置需要添加数据验证的行
dvRangeAgent.Sqref = "D2:F10"
// 此处设置数据验证选项源
dvRangeAgent.SetSqrefDropList("=Test!$A$1:$A$10")
// 添加到对应Sheet
f.AddDataValidation("Test", dvRangeAgent)
f.AddDataValidation("Test_Origin", dvRangeAgent)

// 设置单元格样式
// 样式除了颜色填充以外还有边框,字体等等
style, _ := f.NewStyle(&excelize.Style{
Fill: excelize.Fill{Type: "pattern", Color: []string{"#FF0000"}, Pattern: 1},
})
f.SetCellStyle("Test_Origin", "A1", "H10", style)

// Save spreadsheet by the given path.
if err := f.SaveAs("./test.xlsx"); err != nil {
fmt.Println(err)
return
}

return
}