在 Go (Golang) 中操作 Excel:exelize 和 tealeg/xlsx 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Go (Golang) 中操作 Excel



Go (Golang) 是一种编译型编程语言,非常适合构建高性能的服务器端应用程序、数据处理和自动化。如果您需要生成报告、导入或导出 Excel 格式的数据,Go 提供了几个成熟的库。在本文中,我们将介绍两个最流行的库:exelize 和 tealeg/xlsx。



为什么选择 Go 来处理 Excel?

  • 速度 — Go 编译为机器码,使得处理大型 Excel 文件非常快速。
  • 简单性 — 极简的语法和内置的并发支持 (goroutines) 简化了工作表的并行处理。
  • 跨平台 — 编译后的二进制文件无需依赖即可在 Windows、Linux 和 macOS 上运行。
  • 可靠性 — 强类型和没有异常降低了数据处理时出错的风险。


exelize 库

exelize (github.com/xuri/exelize) 是 Go 中最流行且维护最活跃的 XLSX 操作库。它支持创建、读取和编辑 Excel 文件,并支持样式、公式、合并单元格、图表和图片。



安装

go get github.com/xuri/exelize/v2


示例:创建一个简单的 Excel 文件

package main

import ( "fmt" "github.com/xuri/exelize/v2")

func main() { f := exelize.NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }()

// 创建一个新工作表 index := f.NewSheet("Sheet2") // 设置单元格的值 f.SetCellValue("Sheet2", "A2", "你好,Go!") f.SetCellValue("Sheet1", "B2", 100) // 设置活动工作表 f.SetActiveSheet(index) // 保存文件 if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) }}


示例:从 Excel 读取数据

package main

import ( "fmt" "github.com/xuri/exelize/v2")

func main() { f, err := exelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()

// 获取单元格的值 cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println("B2 的值:", cell)

// 获取工作表中的所有行 rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\\t") } fmt.Println() }}


tealeg/xlsx 库

tealeg/xlsx (github.com/tealeg/xlsx) 是一个较旧但仍然流行的库。它对于基本操作更易于使用,尽管不支持 exelize 的所有功能(图表、图片)。非常适合快速生成简单的报告。



安装

go get github.com/tealeg/xlsx/v3


示例:创建文件

package main

import ( "github.com/tealeg/xlsx/v3")

func main() { wb := xlsx.NewFile() sheet, _ := wb.AddSheet("工作表1") // 添加行 row := sheet.AddRow() row.AddCell().SetString("姓名") row.AddCell().SetString("年龄") row2 := sheet.AddRow() row2.AddCell().SetString("安娜") row2.AddCell().SetInt(28) wb.Save("people.xlsx")}


示例:读取文件

package main

import ( "fmt" "github.com/tealeg/xlsx/v3")

func main() { wb, err := xlsx.OpenFile("people.xlsx") if

推荐