在 Go (Golang) 中操作 Excel:库、示例和工具

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

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

开始课程

在 Go (Golang) 中操作 Excel:库概览与实践示例



Go (Golang) 是一种现代编译型编程语言,越来越多地用于创建服务器应用程序、数据处理和办公任务自动化。其中常见的需求之一是操作 Excel 电子表格。在本文中,我们将介绍在 Go 中操作 Excel 的主要库、它们的功能,并提供实用的代码示例。



在 Go 中操作 Excel 的主要库



目前,最流行且功能最强大的两个库是:



  • excelize (github.com/qax-os/excelize) — 用于读写 Excel 文件(.xlsx 格式)的强大库。支持样式、公式、图表、合并单元格、工作表保护等众多功能。
  • tealeg/xlsx (github.com/tealeg/xlsx) — 一个更轻量级的库,用于基本的 .xlsx 文件读写操作。易于学习,但功能较少。


在本指南中,我们将重点介绍 excelize 库,因为它是在 Go 中操作 Excel 的事实标准。



安装 excelize 库



首先,使用 Go 包管理器安装该库:



go get github.com/qax-os/excelize/v2


安装后,可以将其导入到项目中:



import "github.com/qax-os/excelize/v2"


创建新的 Excel 文件



让我们创建一个包含销售数据的简单文件:



package main

import ( "fmt" "github.com/qax-os/excelize/v2")

func main() { // 创建一个新文件 f := excelize.NewFile() defer f.Close()

// 创建一个新工作表 index := f.NewSheet("销售") // 设置单元格的值 f.SetCellValue("销售", "A1", "商品") f.SetCellValue("销售", "B1", "数量") f.SetCellValue("销售", "C1", "价格") f.SetCellValue("销售", "A2", "笔记本电脑") f.SetCellValue("销售", "B2", 15) f.SetCellValue("销售", "C2", 85000) f.SetCellValue("销售", "A3", "显示器") f.SetCellValue("销售", "B3", 30) f.SetCellValue("销售", "C3", 32000)

// 设置活动工作表 f.SetActiveSheet(index)

// 保存文件 if err := f.SaveAs("sales.xlsx"); err != nil { fmt.Println(err) } fmt.Println("文件创建成功!")


读取现有的 Excel 文件



现在,让我们读取之前创建的文件并将数据输出到控制台:



package main

import ( "fmt" "github.com/qax-os/excelize/v2")

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

// 获取“销售”工作表中的所有行 rows, err := f.GetRows("销售") if err != nil { fmt.Println(err) return }

for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\\t") } fmt.Println() }}


单元格格式与样式



excelize 的强项之一是对样式的支持。以下是一个示例,展示如何使标题加粗并添加边框:



package main

import ( "fmt" "github.com/qax-os/excelize/v2")

func main() { f := excelize.NewFile() defer f.Close()

// 创建标题样式 style, err := f.NewStyle(&excelize.Style{ Font: &excelize.Font{ Bold: true, Size: 12, }, Border: []excelize.Border{ {Type: "left", Color: "000000", Style: 1}, {Type: "right", Color: "000000", Style: 1}, {Type: "top", Color: "000000", Style: 1}, {Type: "bottom", Color: "000000", S

推荐