github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/test/others/func/export/export-animal_plant.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "reflect" 7 8 "github.com/360EntSecGroup-Skylar/excelize/v2" 9 "github.com/easysoft/zendata/cmd/test/others/func/comm" 10 "github.com/easysoft/zendata/cmd/test/others/func/model" 11 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 12 ) 13 14 func main() { 15 filePath := "data/animal_plant/v1.xlsx" 16 sheetName := "animal_plant" 17 18 fileUtils.MkDirIfNeeded(filepath.Dir(filePath)) 19 20 db := comm.GetDB() 21 db.AutoMigrate( 22 &model.DataXiehouyu{}, 23 ) 24 25 pos := make([]model.DataAnimalPlant, 0) 26 db.Where("NOT deleted").Find(&pos) 27 28 f := excelize.NewFile() 29 index := f.NewSheet(sheetName) 30 f.SetActiveSheet(index) 31 32 sheet1 := f.GetSheetName(0) 33 f.DeleteSheet(sheet1) 34 35 var infos []model.TableInfo 36 db.Raw("desc " + model.DataAnimalPlant{}.TableName()).Scan(&infos) 37 38 excelColNameArr, excelColNameHeader := comm.GetExcelColsByTableDef(infos) 39 fieldNames := comm.GetStructFields(model.DataAnimalPlant{}) 40 41 // gen headers 42 for index, name := range excelColNameHeader { 43 excelColName := excelColNameArr[index] 44 excelColId := fmt.Sprintf("%s%d", excelColName, 1) 45 46 f.SetCellValue(sheetName, excelColId, name) 47 } 48 49 // gen rows 50 for rowIndex, po := range pos { 51 for fieldIndex, fieldName := range fieldNames { 52 val := "" 53 54 if fieldName == "Id" { 55 val = fmt.Sprintf("%d", reflect.ValueOf(po).FieldByName(fieldName).Uint()) 56 } else if reflect.ValueOf(po).FieldByName(fieldName).Kind() == reflect.Int { 57 val = fmt.Sprintf("%d", reflect.ValueOf(po).FieldByName(fieldName).Int()) 58 } else { 59 val = reflect.ValueOf(po).FieldByName(fieldName).String() 60 } 61 62 excelColName := excelColNameArr[fieldIndex] 63 excelColId := fmt.Sprintf("%s%d", excelColName, rowIndex+2) 64 65 f.SetCellValue(sheetName, excelColId, val) 66 } 67 } 68 69 f.SaveAs(filePath) 70 }