Excelize - Go Excel 处理
Excelize 是 Go 的 Excel 文件处理库,支持读写 XLSX 文件。掌握 Excelize 是开发报表生成、数据导入导出功能的基础。
创建 Excel
📝 创建工作簿
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
// 创建工作簿
f := excelize.NewFile()
defer f.Close()
// 设置单元格值
f.SetCellValue("Sheet1", "A1", "Name")
f.SetCellValue("Sheet1", "B1", "Age")
f.SetCellValue("Sheet1", "C1", "City")
// 设置数据
f.SetCellValue("Sheet1", "A2", "Alice")
f.SetCellValue("Sheet1", "B2", 30)
f.SetCellValue("Sheet1", "C2", "Beijing")
f.SetCellValue("Sheet1", "A3", "Bob")
f.SetCellValue("Sheet1", "B3", 25)
f.SetCellValue("Sheet1", "C3", "Shanghai")
// 保存文件
if err := f.SaveAs("output.xlsx"); err != nil {
panic(err)
}
fmt.Println("Excel file created")
}
读取 Excel
📝 读取工作簿
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
type User struct {
Name string
Age int
City string
}
func main() {
f, err := excelize.OpenFile("input.xlsx")
if err != nil {
panic(err)
}
defer f.Close()
// 获取所有行
rows, _ := f.GetRows("Sheet1")
for i, row := range rows {
if i == 0 {
continue // 跳过表头
}
if len(row) >= 3 {
user := User{
Name: row[0],
Age: parseInt(row[1]),
City: row[2],
}
fmt.Printf("%+v\n", user)
}
}
}
func parseInt(s string) int {
var result int
fmt.Sscanf(s, "%d", &result)
return result
}
样式和格式
📝 设置样式
package main
import "github.com/xuri/excelize/v2"
func main() {
f := excelize.NewFile()
defer f.Close()
// 创建样式
style, _ := f.NewStyle(&excelize.Style{
Font: &excelize.Font{Bold: true, Size: 14},
Alignment: &excelize.Alignment{Horizontal: "center"},
Fill: excelize.Fill{
Type: "pattern",
Pattern: 1,
Color: []string{"#CCCCCC"},
},
})
// 应用样式
f.SetCellStyle("Sheet1", "A1", "C1", style)
// 设置列宽
f.SetColWidth("Sheet1", "A", "C", 15)
// 合并单元格
f.MergeCell("Sheet1", "A1", "C1")
f.SaveAs("styled.xlsx")
}