"把数据导出成 Excel 发给我"。这句话是无数后端开发的噩梦。虽然 CSV 很简单,但业务人员只认带格式、带图表的 .xlsx 文件。Excelize 是目前 Go 语言生态中最强大、最完善的 Excel 读写库。
Excelize (xuri/excelize) 是一个纯 Go 编写的库,用于读写 Microsoft Excel (XLSX) 文件。它支持流式读写(处理大文件不崩内存),支持插入图表、图片、数据透视表,甚至还能设置单元格样式和公式。
✅ 高性能:流式 API 设计,轻松处理百万行数据✅ 功能全:支持图表、图片、样式、合并单元格、公式计算✅ 兼容好:完美兼容 Microsoft Excel 2007+✅ 零依赖:不需要安装 Office 或其他 C 库
go get github.com/xuri/excelize/v2package mainimport ( "fmt" "github.com/xuri/excelize/v2")func main() { f := excelize.NewFile() deferfunc() { if err := f.Close(); err != nil { fmt.Println(err) } }() // 创建一个工作表 index, _ := f.NewSheet("Sheet2") // 设置单元格的值 f.SetCellValue("Sheet2", "A2", "Hello World.") f.SetCellValue("Sheet1", "B2", 100) // 设置默认工作表 f.SetActiveSheet(index) // 保存文件 if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) }}f, err := excelize.OpenFile("Book1.xlsx")if err != nil { return}// 获取单元格的值cell, _ := f.GetCellValue("Sheet1", "B2")fmt.Println(cell)// 遍历所有行rows, _ := f.GetRows("Sheet1")for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println()}给 Excel 加点颜色:
style, _ := f.NewStyle(&excelize.Style{ Fill: excelize.Fill{ Type: "pattern", Color: []string{"#FF0000"}, Pattern: 1, }, Font: &excelize.Font{ Bold: true, Color: "#FFFFFF", },})f.SetCellStyle("Sheet1", "A1", "C1", style)当需要导出 100 万行数据时,普通模式会吃光内存。使用 StreamWriter:
// 获取流式写入器streamWriter, _ := f.NewStreamWriter("Sheet1")// 逐行写入for i := 1; i <= 1000000; i++ { row := make([]interface{}, 10) for j := 0; j < 10; j++ { row[j] = j } cell, _ := excelize.CoordinatesToCellName(1, i) streamWriter.SetRow(cell, row)}// 冲刷缓冲区streamWriter.Flush()Excelize 是 Go 语言处理 Office 文档的标杆。它文档极其详尽(支持中文),功能极其强大。无论是做报表导出、数据导入,还是自动化办公,Excelize 都是你的不二之选。
🤔 今日讨论:你觉得在Web端直接展示Excel好,还是下载文件好?
👉 回复【Excel】获取百万数据导出优化方案
📱 关注【Gopher部落】,办公自动化一把梭