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  }