在 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