Files
huangguo_server/common/export/export.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

80 lines
1.9 KiB
Go

package export
import (
"path/filepath"
"reflect"
"strconv"
"time"
"github.com/tealeg/xlsx"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func ExportFilePath(fileName string) string {
var path, _ = filepath.Abs("temp")
return path + "/" + fileName
}
func ExportExcel(sheeters []ExcelSheeter, filePath string) error {
f := xlsx.NewFile()
for _, sheeter := range sheeters {
sheet, _ := f.AddSheet(sheeter.GetSheetName())
for _, rower := range sheeter.GetRows() {
row := sheet.AddRow()
for _, cell := range rower.GetCells() {
c := row.AddCell()
c.Value = getValue(reflect.TypeOf(cell).Kind(), reflect.ValueOf(cell))
}
}
}
return f.Save(filePath)
}
func getValue(kind reflect.Kind, value reflect.Value) string {
switch kind {
case reflect.String:
return value.String()
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return strconv.FormatInt(value.Int(), 10)
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
return strconv.FormatUint(value.Uint(), 10)
case reflect.Bool:
return strconv.FormatBool(value.Bool())
case reflect.Float32, reflect.Float64:
return strconv.FormatFloat(value.Float(), 'f', 2, 64)
case reflect.Struct:
if timeV, ok := value.Interface().(time.Time); ok {
return timeV.String()
}
if oid, ok := value.Interface().(primitive.ObjectID); ok {
return oid.Hex()
}
return ""
case reflect.Interface:
if timeV, ok := value.Interface().(time.Time); ok {
return timeV.String()
}
return ""
case reflect.Ptr:
if value.IsNil() {
return ""
}
value = value.Elem()
if value.Interface() != nil {
if timeV, ok := value.Interface().(time.Time); ok {
return timeV.String()
}
} else {
return ""
}
case reflect.Array:
if id, ok := value.Interface().(primitive.ObjectID); ok {
if id.IsZero() {
return ""
}
return id.Hex()
}
}
return "未知"
}