package main

import (
	"fmt"
	"github.com/xuri/excelize/v2"
)

// 定义一个示例结构体
type Student struct {
	Name  string
	Age   int
	Grade string
}

func main() {
	// 创建结构体数组
	students := []Student{
		{"张三", 20, "二年级"},
		{"李四", 22, "三年级"},
		{"王五", 19, "一年级"},
	}

	// 创建一个新的Excel文件
	f := excelize.NewFile()
	// 创建一个新的Sheet
	index, _ := f.NewSheet("Sheet1")

	// 设置Sheet的标题行
	f.SetCellValue("Sheet1", "A1", "姓名")
	f.SetCellValue("Sheet1", "B1", "年龄")
	f.SetCellValue("Sheet1", "C1", "年级")

	// 遍历结构体数组，将数据写入Excel
	for i, student := range students {
		// Excel文件的行是从1开始的，所以这里要加2：1行是标题，另外加1是因为切片索引从0开始
		row := i + 2
		// 根据行信息，写入每一列的数据
		f.SetCellValue("Sheet1", fmt.Sprintf("A%d", row), student.Name)
		f.SetCellValue("Sheet1", fmt.Sprintf("B%d", row), student.Age)
		f.SetCellValue("Sheet1", fmt.Sprintf("C%d", row), student.Grade)
	}

	// 设置默认打开的Sheet
	f.SetActiveSheet(index)

	// 保存文件
	if err := f.SaveAs("students.xlsx"); err != nil {
		fmt.Println(err)
	}
}
