Go语言利用excelize库自动化操作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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
