github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/test/others/func/export/export-english_given.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/name/en.given.v1.xlsx" 16 sheetName := "english_given" 17 18 fileUtils.MkDirIfNeeded(filepath.Dir(filePath)) 19 20 db := comm.GetDB() 21 db.AutoMigrate( 22 &model.DataEnglishGiven{}, 23 ) 24 25 pos := make([]model.DataEnglishGiven, 0) 26 db.Order("id ASC").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.DataEnglishGiven{}.TableName()).Scan(&infos) 37 38 excelColNameArr, excelColNameHeader := comm.GetExcelColsByTableDef(infos) 39 fieldNames := comm.GetStructFields(model.DataEnglishGiven{}) 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 kind := reflect.ValueOf(po).FieldByName(fieldName).Kind() 55 56 if fieldName == "Id" { 57 val = fmt.Sprintf("%d", reflect.ValueOf(po).FieldByName(fieldName).Uint()) 58 } else if kind == reflect.Bool { 59 val = fmt.Sprintf("%t", reflect.ValueOf(po).FieldByName(fieldName).Bool()) 60 } else { 61 val = reflect.ValueOf(po).FieldByName(fieldName).String() 62 } 63 64 excelColName := excelColNameArr[fieldIndex] 65 excelColId := fmt.Sprintf("%s%d", excelColName, rowIndex+2) 66 67 f.SetCellValue(sheetName, excelColId, val) 68 } 69 } 70 71 f.SaveAs(filePath) 72 }