用Go语言Excelize库玩转Excel

作为Golang开发者,处理Excel文件是否总让你头疼?手动操作费时费力,代码处理又担心兼容性差?今天带你解锁Excelize这个宝藏库,用Go语言轻松实现Excel的创建、读写、样式定制甚至图表生成!
一、Excelize库:为什么它成为Go语言处理Excel的首选?
Excelize是Go语言中功能最全、性能最强的Excel操作库,支持XLSX/XLSM/XLTM等格式,兼容Excel 2007+、LibreOffice和WPS。它能处理复杂组件(如透视表、切片器),甚至支持流式读写,轻松应对百万级数据。
核心优势:
- ✅ 支持公式计算、样式设置、图表生成
- ✅ 流式API减少内存占用,性能优化显著
- ✅ 官方文档完善,社区活跃(GitHub Star 18.9k+)
二、从0到1:5分钟上手Excelize
1️⃣ 安装库:一行命令搞定
go get github.com/xuri/excelize/v2
安装后导入库:
import "github.com/xuri/excelize/v2"
(注意:需Go 1.17+版本,低版本需升级)
2️⃣ 创建Excel文件:新手必学
func createExcel() {
f := excelize.NewFile()
defer f.Close()
// 写入数据
f.SetCellValue("Sheet1", "A1", "产品名称")
f.SetCellValue("Sheet1", "B1", "销量")
f.SetCellValue("Sheet1", "A2", "咖啡机")
f.SetCellValue("Sheet1", "B2", 1500)
// 保存文件
if err := f.SaveAs("sales.xlsx"); err != nil {
panic(err)
}
}
运行后生成sales.xlsx,轻松搞定表格创建!
三、进阶技巧:让你的Excel“会说话”
1️⃣ 样式美化:秒变专业报表
func setStyle() {
f := excelize.NewFile()
styleID, _ := f.NewStyle(&excelize.Style{
Alignment: &excelize.Alignment{
Horizontal: "center",
Vertical: "center",
},
Font: &excelize.Font{Bold: true, Color: "#FF0000"},
Fill: excelize.Fill{Type: "pattern", Color: []string{"#FFFF00"}, Pattern: 1},
})
// 应用样式到标题行
f.SetCellValue("Sheet1", "A1", "产品名称")
f.SetCellValue("Sheet1", "B1", "销量")
f.SetCellStyle("Sheet1", "A1", "B1", styleID)
err := f.SaveAs("styled.xlsx")
if err != nil {
panic(err)
}
}
效果:标题行文字居中加红、背景变黄,数据一目了然。
2️⃣ 公式计算:自动求和、平均值
func setCellFormula() {
f := excelize.NewFile()
defer f.Close()
// 写入数据
f.SetCellValue("Sheet1", "A1", "产品名称")
f.SetCellValue("Sheet1", "B1", "销量")
f.SetCellValue("Sheet1", "A2", "咖啡机")
f.SetCellValue("Sheet1", "B2", 1500)
f.SetCellValue("Sheet1", "A3", "打印机")
f.SetCellValue("Sheet1", "B3", 5900)
f.SetCellValue("Sheet1", "A4", "总计")
f.SetCellFormula("Sheet1", "B4", "SUM(B2:B3)")
// 获取计算结果
result, _ := f.CalcCellValue("Sheet1", "B4")
fmt.Println("总计销量:", result)
// 保存文件
if err := f.SaveAs("sales.xlsx"); err != nil {
panic(err)
}
}
支持Excel内置公式,如SUM
、AVERAGE
等。
3️⃣ 生成图表:数据可视化
func setChart() {
f := excelize.NewFile()
defer f.Close()
// 写入数据
f.SetCellValue("Sheet1", "A1", "产品名称")
f.SetCellValue("Sheet1", "B1", "销量")
f.SetCellValue("Sheet1", "A2", "咖啡机")
f.SetCellValue("Sheet1", "B2", 1500)
f.SetCellValue("Sheet1", "A3", "打印机")
f.SetCellValue("Sheet1", "B3", 5900)
f.SetCellValue("Sheet1", "A4", "总计")
f.SetCellFormula("Sheet1", "B4", "SUM(B2:B3)")
if err := f.AddChart("Sheet1", "D1", &excelize.Chart{
Type: excelize.Col,
Series: []excelize.ChartSeries{
{Name: "Sheet1!$A$2", Categories: "Sheet1!$A$2:$A$3", Values: "Sheet1!$B$2:$B$3"},
},
Title: []excelize.RichTextRun{{Text: "销量分析"}},
}); err != nil {
panic(err)
}
if err := f.SaveAs("sales2.xlsx"); err != nil {
panic(err)
}
}
生成柱状图,让数据跃然“表”上!
四、性能优化:百万级数据也不卡
面对大数据,开启流式写入模式,内存占用降低90%!
func dataFlush() {
f := excelize.NewFile()
defer f.Close()
sw, _ := f.NewStreamWriter("Sheet1")
for i := 1; i <= 100000; i++ {
row := []interface{}{fmt.Sprintf("产品%d", i), i * 10}
cell, _ := excelize.CoordinatesToCellName(1, i)
sw.SetRow(cell, row)
}
sw.Flush()
if err := f.SaveAs("sales1.xlsx"); err != nil {
panic(err)
}
}
轻松处理10万行数据,速度提升5倍!
五、避坑指南:新手常见问题
- 文件路径错误:保存文件时需检查目录权限
- 样式不生效:确保样式ID正确绑定到单元格
- 公式计算延迟:使用
CalcCellValue
主动触发计算
六、总结
Excelize是Go开发者处理Excel的“瑞士军刀”,从基础操作到高级功能全覆盖。
