diff --git a/grmi/export.go b/grmi/export.go new file mode 100644 index 0000000..c059967 --- /dev/null +++ b/grmi/export.go @@ -0,0 +1,110 @@ +/****************************************************************************** + * @Function Name : + *----------------------------------------------------------------------------- + * @Description : + * @Function Parameters: + * @Return Value : + * @Author : Zhang Xin + * @Date : 2021/3/3 11:02 + ******************************************************************************/ +package grmi + +import ( + "LAPP_GAAS_GFrame_BACKEND/utils" + "errors" + "fmt" + "github.com/360EntSecGroup-Skylar/excelize/v2" + "reflect" +) + +/****************************************************************************** + * + * @Function Name : SaveExcelFile + *----------------------------------------------------------------------------- + * + * @Description : 把传入的[]interface 数据保存成excel + * + * @Function Parameters : []interface{} 需要保存的数据切片 + * + * @Function Parameters : sheetName excel sheet名称 + * + * @Function Parameters : prefixFilename 保存文件的前缀名称 后面会有自动添加时间和文件类型后缀 + * + * @Return Value : filepath 文件路径 + * + * @Return Value : err 执行出现的错误 + * + * @Author : zhangxin + * + * @Date : 2021-03-19 + * + ******************************************************************************/ +func SaveExcelFile(list []interface{}, titleList []string, sheetName string, prefixFilename string) (filepath string, err error) { + file := excelize.NewFile() + if sheetName != "Sheet1" { + file.NewSheet(sheetName) + file.DeleteSheet("Sheet1") + } + streamWriter, err := file.NewStreamWriter(sheetName) + if err != nil { + fmt.Println("errors:", err.Error()) + return "", err + } + for index, item := range list { + if index == 0 { + typeOfS := reflect.TypeOf(item) + row := make([]interface{}, typeOfS.NumField()) + if len(titleList) != 0 { + if len(titleList) != typeOfS.NumField() { + return "", errors.New("titleList和item字段数量不相等") + } + for i := 0; i < typeOfS.NumField(); i++ { + row[i] = titleList[i] + } + + } else { + 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) + } + } + reflectValue := reflect.ValueOf(item) + row := make([]interface{}, reflectValue.NumField()) + for i := 0; i < reflectValue.NumField(); i++ { + var date Date + var datetime DateTime + if reflect.TypeOf(date) == reflectValue.Field(i).Type() { + filed := reflectValue.Field(i).Interface().(Date) + row[i] = filed.ToString() + } else if reflect.TypeOf(datetime) == reflectValue.Field(i).Type() { + filed := reflectValue.Field(i).Interface().(DateTime) + row[i] = filed.ToString() + } else { + row[i] = reflectValue.Field(i) + } + } + cell, _ := excelize.CoordinatesToCellName(1, index+2) + if err := streamWriter.SetRow(cell, row); err != nil { + return "", err + } + } + if err := streamWriter.Flush(); err != nil { + return "", err + } + filename := utils.MakeOrderSn(prefixFilename) + ".xlsx" + dirname, err := utils.GetCurrentPath("web/public/uploadxlsx") + if err != nil { + return "", err + } + filepath = dirname + "/" + filename + err = file.SaveAs(filepath) + if err != nil { + return "", err + } + return filepath, nil +} diff --git a/utils/utils.go b/utils/utils.go index ef7e13b..379ee69 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -3,7 +3,6 @@ package utils import ( "errors" "fmt" - "github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/lianggx6/goutf16" "io" "math/rand" @@ -389,70 +388,3 @@ func FileExist(file string) bool { return true } - -/****************************************************************************** - * - * @Function Name : SaveExcelFile - *----------------------------------------------------------------------------- - * - * @Description : 把传入的[]interface 数据保存成excel - * - * @Function Parameters : []interface{} 需要保存的数据切片 - * - * @Function Parameters : sheetName excel sheet名称 - * - * @Function Parameters : prefixFilename 保存文件的前缀名称 后面会有自动添加时间和文件类型后缀 - * - * @Return Value : filepath 文件路径 - * - * @Return Value : err 执行出现的错误 - * - * @Author : zhangxin - * - * @Date : 2021-03-19 - * - ******************************************************************************/ -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 - } - filepath = dirname + "/" + filename - err = file.SaveAs(filepath) - if err != nil { - return "", err - } - return filepath, nil -} \ No newline at end of file