在 Go (Golang) 中处理 Excel:Excelize、xlsx、tealeg 库

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

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

开始课程

在 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

推荐