在 Go (Golang) 中处理 Excel:完整指南
尽管 Python 仍然是数据处理领域无可争议的领导者,但 Go (Golang) 越来越多地被用于创建高性能的服务器端应用程序,这些应用需要快速生成报告、从表格导入数据或与会计系统集成。在本文中,我们将介绍 Go 中用于处理 Excel 的三个最流行的库:Excelize、xlsx (tealeg) 和 xlsx (qax-os)。您将学习如何读取、创建和格式化 XLSX 文件,并获取现成的代码示例。
为什么选择 Go 来处理 Excel?
Go 编译为原生代码,内存占用少,且扩展性极佳。Go 中的 Excel 库完全满足业务应用的需求:从简单的数据导出到包含合并单元格、样式和图表的复杂格式化。同时,Go 不需要安装办公套件或 Microsoft Office Interop——所有操作都直接针对 OOXML 的 XML 结构执行。
1. Excelize——Go 中最强大的库
Excelize 是一个纯 Go 库,支持读写 XLSX、XLSM、XLTM 文件,以及处理 图表、图片、表格、条件格式 和 数据透视表。它正在积极开发中,并且在 Go 的 Excel 解决方案中拥有最大的社区。
安装
go get github.com/xuri/excelize/v2示例:创建带格式的 Excel 文件
package main
import ( "fmt" "github.com/xuri/excelize/v2")
func main() { f := excelize.NewFile() defer f.Close()
// 创建新工作表 index := f.NewSheet("Sheet2") f.SetCellValue("Sheet2", "A1", "名称") f.SetCellValue("Sheet2", "B1", "数量") f.SetCellValue("Sheet2", "A2", "商品 A") f.SetCellValue("Sheet2", "B2", 150)
// 为标题设置样式 style, _ := f.NewStyle(&excelize.Style{ Font: &excelize.Font{Bold: true, Color: "FFFFFF"}, Fill: excelize.Fill{Type: "pattern", Pattern: 1, Color: []string{"4472C4"}}, }) f.SetCellStyle("Sheet2", "A1", "B1", style)
// 设置活动工作表 f.SetActiveSheet(index)
// 保存文件 if err := f.SaveAs("报告.xlsx"); err != nil { fmt.Println(err) }}读取现有文件
package main
import ( "fmt" "github.com/xuri/excelize/v2")
func main() { f, err := excelize.OpenFile("报告.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()
// 读取单元格的值 cell, _ := f.GetCellValue("Sheet2", "A2") fmt.Println("A2 的值:", cell)
// 读取工作表的所有行 rows, _ := f.GetRows("Sheet2") for _, row := range rows { for _, col := range row { fmt.Print(col, "\\t") } fmt.Println() }}2. xlsx (tealeg)——轻量且快速的解析器
tealeg/xlsx 库是用于读写 XLSX 的经典工具。它比 Excelize 更简单,但能很好地处理基本任务。支持样式、合并单元格、批注和条件格式。
安装
go get github.com/tealeg/xlsx/v3示例:写入数据
package main
import ( "github.com/tealeg/xlsx/v3")
func main() { wb := xlsx.NewFile() sheet, _ := wb.AddSheet("数据")
// 添加行 row := sheet.AddRow() cell1 := row.AddCell() cell1.Value = "姓名" cell2 := row.AddCell() cell2.Value = "年龄"
row2 := sheet.AddRow() row2.AddCell().SetStrin