用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内置公式,如SUMAVERAGE等。

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倍!


五、避坑指南:新手常见问题

  1. 文件路径错误:保存文件时需检查目录权限
  2. 样式不生效:确保样式ID正确绑定到单元格
  3. 公式计算延迟:使用CalcCellValue主动触发计算

六、总结

Excelize是Go开发者处理Excel的“瑞士军刀”,从基础操作到高级功能全覆盖。

wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo