快速开始

《Excelize 权威指南》图书出版,网上购买方式:人民邮电出版社 |异步社区 |天猫 |京东 |当当 |微店 |抖音 |拼多多

安装

下表列出了各版本 Excelize 基础库对 Go 语言版本最低要求的情况:

Excelize 版本对 Go 语言版本的最低要求
v2.8.11.18
v2.7.0 ~ v2.8.01.16
v2.4.0 ~ v2.6.11.15
v2.0.2 ~ v2.3.21.10
v1.0.0 ~ v2.0.11.6

使用最新版本 Excelize 要求您使用的 Go 语言为 1.18 或更高版本。请注意,Go 1.21.0 中存在不兼容的更改,导致 Excelize 基础库无法在该版本上正常工作,如果您使用的是 Go 1.21.x,请升级到 Go 1.21.1 及更高版本。

  • 安装命令
  1. go get github.com/xuri/excelize
  • 如果您使用 Go Modules 管理软件包,请使用下面的命令来安装最新版本。
  1. go get github.com/xuri/excelize/v2

更新

  • 更新命令
  1. go get -u github.com/xuri/excelize/v2

创建 Excel 文档

下面是一个创建 Excel 文档的简单例子:

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func main() {
  7. f := excelize.NewFile()
  8. defer func() {
  9. if err := f.Close(); err != nil {
  10. fmt.Println(err)
  11. }
  12. }()
  13. // 创建一个工作表
  14. index, err := f.NewSheet("Sheet2")
  15. if err != nil {
  16. fmt.Println(err)
  17. return
  18. }
  19. // 设置单元格的值
  20. f.SetCellValue("Sheet2", "A2", "Hello world.")
  21. f.SetCellValue("Sheet1", "B2", 100)
  22. // 设置工作簿的默认工作表
  23. f.SetActiveSheet(index)
  24. // 根据指定路径保存文件
  25. if err := f.SaveAs("Book1.xlsx"); err != nil {
  26. fmt.Println(err)
  27. }
  28. }

读取 Excel 文档

下面是读取 Excel 文档的例子:

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func main() {
  7. f, err := excelize.OpenFile("Book1.xlsx")
  8. if err != nil {
  9. fmt.Println(err)
  10. return
  11. }
  12. defer func() {
  13. if err := f.Close(); err != nil {
  14. fmt.Println(err)
  15. }
  16. }()
  17. // 获取工作表中指定单元格的值
  18. cell, err := f.GetCellValue("Sheet1", "B2")
  19. if err != nil {
  20. fmt.Println(err)
  21. return
  22. }
  23. fmt.Println(cell)
  24. // 获取 Sheet1 上所有单元格
  25. rows, err := f.GetRows("Sheet1")
  26. if err != nil {
  27. fmt.Println(err)
  28. return
  29. }
  30. for _, row := range rows {
  31. for _, colCell := range row {
  32. fmt.Print(colCell, "\t")
  33. }
  34. fmt.Println()
  35. }
  36. }

在 Excel 文档中创建图表

使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。

在 Excel 文档中创建图表

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func main() {
  7. f := excelize.NewFile()
  8. defer func() {
  9. if err := f.Close(); err != nil {
  10. fmt.Println(err)
  11. }
  12. }()
  13. for idx, row := range [][]interface{}{
  14. {nil, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
  15. {"Normal", 5, 2, 4}, {"Large", 6, 7, 8},
  16. } {
  17. cell, err := excelize.CoordinatesToCellName(1, idx+1)
  18. if err != nil {
  19. fmt.Println(err)
  20. return
  21. }
  22. f.SetSheetRow("Sheet1", cell, &row)
  23. }
  24. if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
  25. Type: excelize.Col3DClustered,
  26. Series: []excelize.ChartSeries{
  27. {
  28. Name: "Sheet1!$A$2",
  29. Categories: "Sheet1!$B$1:$D$1",
  30. Values: "Sheet1!$B$2:$D$2",
  31. },
  32. {
  33. Name: "Sheet1!$A$3",
  34. Categories: "Sheet1!$B$1:$D$1",
  35. Values: "Sheet1!$B$3:$D$3",
  36. },
  37. {
  38. Name: "Sheet1!$A$4",
  39. Categories: "Sheet1!$B$1:$D$1",
  40. Values: "Sheet1!$B$4:$D$4",
  41. }},
  42. Title: []excelize.RichTextRun{
  43. {
  44. Text: "Fruit 3D Clustered Column Chart",
  45. },
  46. },
  47. }); err != nil {
  48. fmt.Println(err)
  49. return
  50. }
  51. // 根据指定路径保存文件
  52. if err := f.SaveAs("Book1.xlsx"); err != nil {
  53. fmt.Println(err)
  54. }
  55. }

向 Excel 文档中插入图片

  1. package main
  2. import (
  3. "fmt"
  4. _ "image/gif"
  5. _ "image/jpeg"
  6. _ "image/png"
  7. "github.com/xuri/excelize/v2"
  8. )
  9. func main() {
  10. f, err := excelize.OpenFile("Book1.xlsx")
  11. if err != nil {
  12. fmt.Println(err)
  13. return
  14. }
  15. defer func() {
  16. if err := f.Close(); err != nil {
  17. fmt.Println(err)
  18. }
  19. }()
  20. // 插入图片
  21. if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
  22. fmt.Println(err)
  23. return
  24. }
  25. // 在工作表中插入图片,并设置图片的缩放比例
  26. if err := f.AddPicture("Sheet1", "D2", "image.jpg",
  27. &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
  28. fmt.Println(err)
  29. return
  30. }
  31. // 在工作表中插入图片,并设置图片的打印属性
  32. enable, disable := true, false
  33. if err := f.AddPicture("Sheet1", "H2", "image.gif",
  34. &excelize.GraphicOptions{
  35. PrintObject: &enable,
  36. LockAspectRatio: false,
  37. OffsetX: 15,
  38. OffsetY: 10,
  39. Locked: &disable,
  40. }); err != nil {
  41. fmt.Println(err)
  42. return
  43. }
  44. // 保存文件
  45. if err = f.Save(); err != nil {
  46. fmt.Println(err)
  47. }
  48. }