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