diff --git a/utils/utils.go b/utils/utils.go index d449559..14e2e61 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -3,6 +3,7 @@ package utils import ( "errors" "fmt" + "github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/lianggx6/goutf16" "io" "math/rand" @@ -386,4 +387,46 @@ func FileExist(file string) bool { } return true +} + + + +func SaveExcelFile(list []interface{}, sheetName string, prefixFilename string) (filepath string, err error) { + file := excelize.NewFile() + streamWriter, err := file.NewStreamWriter(sheetName) + if err != nil { + return "", err + } + for index, item := range list { + if index == 0 { + typeOfS := reflect.TypeOf(item) + row := make([]interface{}, typeOfS.NumField()) + for i := 0; i < typeOfS.NumField(); i++ { + row[i] = typeOfS.Field(i).Name + + } + cell, _:= excelize.CoordinatesToCellName(1, 1) + if err := streamWriter.SetRow(cell, row); err != nil { + fmt.Println(err) + } + } + typeOfS := reflect.ValueOf(item) + row := make([]interface{}, typeOfS.NumField()) + for i := 0; i < typeOfS.NumField(); i++ { + row[i] = typeOfS.Field(i) + } + cell, _:= excelize.CoordinatesToCellName(1, index+2) + if err := streamWriter.SetRow(cell, row); err != nil { + fmt.Println(err) + } + } + if err := streamWriter.Flush(); err != nil { + fmt.Println(err) + } + filename := MakeOrderSn(prefixFilename) + ".xlsx" + dirname, err := GetCurrentPath("web/public/uploadxlsx") + if err != nil { + return "", err + } + return dirname + "/" + filename, nil } \ No newline at end of file