添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Excelize是一个用纯Go编写的库,它提供了一组函数,允许您写入和读取XLAM / XLSM / XLSX / XLTM / XLTX文件。支持读取和编写由 Microsoft Excel™ 2007 及更高版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供流式 API,用于从包含大量数据的工作表中生成或读取数据。此库需要 Go 版本 1.15 或更高版本。完整的API文档可以使用go的内置文档工具查看,也可以在go.dev文档参考中在线查看。

功能确实很强大哈,👉 GitHub链接

官方中文文档👉 点这里

go get github.com/xuri/excelize/v2

创建一个简易的excel文件。

package main
import (
	"fmt"
	"github.com/xuri/excelize/v2"
func main() {
	file := excelize.NewFile()                        //新建一个excel文件
	index := file.NewSheet("sheet页1")                 //新建一个sheet页,参数sheet页名称
	file.SetCellValue("sheet页1", "A2", "hello world") //给sheet页1 中 A2 单元格写入"hello world"
	file.SetCellValue("Sheet1", "B2", 100)            //如果不直接创建,会创建默认的sheet1
	file.SetCellValue("Sheet页2", "B2", 100)           //这一行不会生效
	file.SetActiveSheet(index)                        //设置活动的工作表为index
	if err := file.SaveAs("Book1.xlsx"); err != nil { //保存为excel文件,传入文件路径参数
		fmt.Println(err)

这里就创建了一个简单的excel文件并给单元格中写值。注意这里的SetCellValue方法,传入Sheet+数字会创建默认的Sheet页并按数字顺序排列。传入其他字符串不会新建一个以该字符串命名的Sheet页。

读表格中的数据

首先,修改了下Book1.xlsx。

package main
import (
	"fmt"
	"github.com/xuri/excelize/v2"
func main() {
	// 首先,肯定要打开一个表格
	f, err := excelize.OpenFile("Book1.xlsx")
	if err != nil {
		fmt.Println(err) //打印错误
		return           //确保往下运行
	defer func() {
		// 最后关闭打开的表格
		if err := f.Close(); err != nil {
			fmt.Println(err) //关闭失败打印错误
	// 读取单个单元格的值
	// 读取刚才创建的Sheet1表格B2单元格的值,这里cell返回的String类型
	cell, err := f.GetCellValue("Sheet1", "B2")
	if err != nil {
		fmt.Println(err)
		return
	fmt.Println(cell) //100
	// 读取所有行的值
	fmt.Println("开始读取行了")
	rows, err := f.GetRows("Sheet1")
	if err != nil {
		fmt.Println(err)
		return
	for i, row := range rows {
		for _, colCell := range row {
			fmt.Println(colCell, "\t")
		fmt.Printf("这是第%d行\n", i)

输出结果:

开始读取行了 这是第0行 这是添加的 前面有个空单元格 这是第1行 这是第2行

需要注意的是,GetRows会跳过空行,比如这里的第一行和第三行,因为都是空值,直接省略了。

使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。

package main
import (
	"fmt"
	"github.com/xuri/excelize/v2"
func main() {
	categories := map[string]string{
		"A2": "小",
		"A3": "中等",
		"A4": "大",
		"B1": "苹果",
		"C1": "橘子",
		"D1": "梨",
	values := map[string]int{
		"B2": 2,
		"C2": 3,
		"D2": 15,
		"B3": 5,
		"C3": 2,
		"D3": 3,
		"B4": 9,
		"C4": 10,
		"D4": 6,
	f := excelize.NewFile()
	for k, v := range categories {
		f.SetCellValue("Sheet1", k, v)
	for k, v := range values {
		f.SetCellValue("Sheet1", k, v)
	// 生成图表
	if err := f.AddChart("Sheet1", "E1", `{
		"type": "col3DClustered",
        "series": [
            "name": "Sheet1!$A$2",
            "categories": "Sheet1!$B$1:$D$1",
            "values": "Sheet1!$B$2:$D$2"
            "name": "Sheet1!$A$3",
            "categories": "Sheet1!$B$1:$D$1",
            "values": "Sheet1!$B$3:$D$3"
            "name": "Sheet1!$A$4",
            "categories": "Sheet1!$B$1:$D$1",
            "values": "Sheet1!$B$4:$D$4"
        "title":
            "name": "3D簇状柱形图-水果"
	}`); err != nil {
		fmt.Println(err)
	// 保存文件到当前路径
	if err := f.SaveAs("Book1.xlsx"); err != nil {
		fmt.Println(err)