← GoCSV | Sonic →

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")
}

📖 延伸阅读