| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package utils
- import (
- "github.com/xuri/excelize/v2"
- "reflect"
- )
- func ExportExcelFile[T any](headers []string, data []T, savePath string) {
- if savePath == "" || len(data) == 0 {
- return
- }
- f := excelize.NewFile()
- sheetName := "Sheet1"
- if err := f.SetSheetName("Sheet1", sheetName); err != nil {
- return
- }
- // 写入表头
- for i, header := range headers {
- cell, _ := excelize.CoordinatesToCellName(i+1, 1)
- if err := f.SetCellValue(sheetName, cell, header); err != nil {
- return
- }
- }
- // 使用反射获取结构体字段值
- for rowIndex, row := range data {
- rowValue := reflect.ValueOf(row)
- for colIndex := 0; colIndex < rowValue.NumField(); colIndex++ {
- cell, _ := excelize.CoordinatesToCellName(colIndex+1, rowIndex+2)
- field := rowValue.Field(colIndex)
- if field.CanInterface() {
- if err := f.SetCellValue(sheetName, cell, field.Interface()); err != nil {
- return
- }
- }
- }
- }
- // 保存 Excel 文件
- if err := f.SaveAs(savePath); err != nil {
- return
- }
- }
|