Go语言利用excelize库自动化操作Excel的实战指南

 更新时间:2026年03月05日 08:23:33   作者:程序员爱钓鱼  
这篇文章主要为大家详细介绍了如何使用Go语言自动化操作Excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下吧

在开发 Excel 批量处理工具时,例如多 Sheet 汇总、批量清理公式、XLSX 转换、报表生成等,如果不希望依赖 Windows COM 或本地安装 Excel,那么最合适的方案是:github.com/xuri/excelize/v2

这是目前 Go 生态中最成熟、使用最广泛的 Excel 操作库之一。

一、excelize 是什么

excelize 是一个纯 Go 实现的 Excel 读写库。

项目作者是 Xuri。

核心特点:

  • 不依赖 Excel 软件
  • 支持 Windows / macOS / Linux
  • 适合桌面程序和服务器程序
  • 支持 xlsx、xlsm、模板文件
  • 性能稳定
  • API 设计清晰

它本质是直接操作 Office Open XML 结构,而不是调用 Excel 进程。

二、为什么推荐 excelize

和 COM 方案相比:

excelize 的优势:

  • 不需要安装 Office
  • 不会残留 Excel 进程
  • 不存在 COM 线程模型问题
  • 可以运行在服务器环境
  • 更适合批量自动化处理

COM 方案适合需要调用宏或真实 Excel 功能的场景。

如果只是做:

  • Excel 数据合并
  • 批量清理公式
  • 批量导出报表
  • SaaS 报表下载
  • CSV 转 XLSX

excelize 是更优解。

三、基础使用示例

创建 Excel 文件

package main

import "github.com/xuri/excelize/v2"

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

	f.SetCellValue("Sheet1", "A1", "Hello")
	f.SetCellValue("Sheet1", "B1", 123)

	f.SaveAs("test.xlsx")
}

打开并读取文件

f, err := excelize.OpenFile("test.xlsx")
if err != nil {
	panic(err)
}

value, _ := f.GetCellValue("Sheet1", "A1")
println(value)

遍历整张表

rows, _ := f.GetRows("Sheet1")

for _, row := range rows {
	for _, col := range row {
		print(col, "\t")
	}
	println()
}

四、常见实战场景

结合实际开发经验,下面是几个高频需求示例。

1. 批量清理公式(将公式转为值)

rows, _ := f.GetRows("Sheet1")

for i, row := range rows {
	for j := range row {
		cell, _ := excelize.CoordinatesToCellName(j+1, i+1)
		value, _ := f.GetCellValue("Sheet1", cell)
		f.SetCellValue("Sheet1", cell, value)
	}
}

适合做 Excel 表格公式批量清理工具。

2. 多 Sheet 数据汇总

target := excelize.NewFile()

for _, sheet := range f.GetSheetList() {
	rows, _ := f.GetRows(sheet)
	for i, row := range rows {
		for j, val := range row {
			cell, _ := excelize.CoordinatesToCellName(j+1, i+1)
			target.SetCellValue("Sheet1", cell, val)
		}
	}
}

适合多表汇总工具。

3. 设置样式

style, _ := f.NewStyle(&excelize.Style{
	Font: &excelize.Font{
		Bold: true,
		Color: "FF0000",
	},
})

f.SetCellStyle("Sheet1", "A1", "A1", style)

4. 插入图片

f.AddPicture("Sheet1", "A1", "logo.png", nil)

五、大数据处理建议

如果数据量超过 5 万行,建议使用流式写入。

streamWriter, _ := f.NewStreamWriter("Sheet1")

row := []interface{}{"ID", "Name", "Price"}
streamWriter.SetRow("A1", row)

streamWriter.Flush()

优点:

  • 内存占用低
  • 写入速度快
  • 适合报表导出

六、性能优化建议

  • 大文件使用 StreamWriter
  • 避免频繁调用 Save
  • 多文件处理可以并发
  • 尽量减少重复读取单元格

七、常见问题

不支持 .xls

excelize 仅支持:

  • .xlsx
  • .xlsm
  • .xltx

旧版 .xls 需要转换后再处理。

公式不会自动计算

excelize 不会像 Excel 一样执行公式。

读取到的是缓存值。

如果文件从未被 Excel 计算过,公式结果可能为空。

内存占用问题

普通模式会加载整个文件到内存。

超大文件建议:

  • 使用流式 API
  • 分批处理

八、典型应用架构

如果在桌面工具中使用,例如 Wails 项目:

前端 Vue ↓ Go 后端 ↓ excelize ↓ 生成或处理 Excel

优点:

  • 无需依赖 Excel
  • 不会出现 COM 崩溃
  • 更容易打包分发

九、总结

github.com/xuri/excelize/v2 是目前 Go 生态中最成熟的 Excel 操作库。

适合:

  • Excel 批量处理
  • 报表生成
  • 数据清洗
  • CSV 转 XLSX
  • 模板填充

如果你的项目目标是稳定、跨平台、高性能批量处理,那么 excelize 是首选方案。

到此这篇关于Go语言利用excelize库自动化操作Excel的实战指南的文章就介绍到这了,更多相关Go操作Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • goland服务热重启的配置文件

    goland服务热重启的配置文件

    这篇文章主要介绍了goland服务热重启的配置文件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Golang动态调用方法小结

    Golang动态调用方法小结

    本文主要介绍了Golang动态调用方法小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 完美解决go Fscanf 在读取文件时出现的问题

    完美解决go Fscanf 在读取文件时出现的问题

    这篇文章主要介绍了完美解决go Fscanf 在读取文件时出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Go语言defer语句的三种机制整理

    Go语言defer语句的三种机制整理

    在本篇文章里小编给大家分享的是一篇关于Go语言defer语句的三种机制整理,需要的朋友们学习下吧。
    2020-03-03
  • 深入浅出Go语言:手把手教你高效生成与解析JSON数据

    深入浅出Go语言:手把手教你高效生成与解析JSON数据

    本文将带你一步步走进Go语言的世界,教你如何高效生成与解析JSON数据,无论你是初学者还是经验丰富的开发者,都能在本文中找到实用的技巧和灵感,本文内容简洁明了,示例丰富,让你在阅读的过程中轻松掌握Go语言生成与解析JSON数据的技巧,需要的朋友可以参考下
    2024-02-02
  • windows下使用vscode搭建golang环境并调试的过程

    windows下使用vscode搭建golang环境并调试的过程

    这篇文章主要介绍了在windows下使用vscode搭建golang环境并进行调试,主要包括安装方法及环境变量配置技巧,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Go语言中包导入下划线的作用详细解析

    Go语言中包导入下划线的作用详细解析

    这篇文章主要介绍了Go语言中包导入下划线作用的相关资料,下划线导入可以帮助我们更好地管理初始化逻辑,减少代码的冗余,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • 浅谈Go语言多态的实现与interface使用

    浅谈Go语言多态的实现与interface使用

    如果大家系统的学过C++、Java等语言以及面向对象的话,相信应该对多态不会陌生。多态是面向对象范畴当中经常使用并且非常好用的一个功能,它主要是用在强类型语言当中,像是Python这样的弱类型语言,变量的类型可以随意变化,也没有任何限制,其实区别不是很大
    2021-06-06
  • Go语言中的Prometheus监控实战

    Go语言中的Prometheus监控实战

    本文主要介绍了Go语言中的Prometheus监控实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • Go全局异常的实现示例

    Go全局异常的实现示例

    在Go项目开发中,有效的异常处理是确保程序健壮性和稳定性的关键因素之一,全局异常处理机制能够统一处理项目中可能出现的各种异常情况,下面就来介绍一下Go全局异常,感兴趣的可以了解一下
    2025-08-08

最新评论