golang 将structx写入excel

1.func()

import(
	"falcon/middleware/contrib/cache"
	"fmt"
	"reflect"
	"github.com/360EntSecGroup-Skylar/excelize"

	)



func WriteXlsx(sheet string, records interface{}) *excelize.File {
	xlsx := excelize.NewFile()    // new file
	index := xlsx.NewSheet(sheet) // new sheet
	xlsx.SetActiveSheet(index)    // set active (default) sheet
	firstCharacter := 65          // start from 'A' line
	t := reflect.TypeOf(records)
	// log.Info(t)
	if t.Kind() != reflect.Slice {
		return xlsx
	}
	s := reflect.ValueOf(records)
	// log.Info(s)
	for i := 0; i < s.Len(); i++ {
		elem := s.Index(i).Interface()
		elemType := reflect.TypeOf(elem)
		elemValue := reflect.ValueOf(elem)
		// log.Info(elemValue)
		for j := 0; j < elemType.NumField(); j++ {
			field := elemType.Field(j)
			//获取atruct的tag
			tag := field.Tag.Get("xlsx")
			// log.Info(tag)
			name := tag
			column := string(firstCharacter + j)
			if tag == "" {
				// log.Info(tag)
				continue
			}
			// 把读到的tag写入表头
			if i == 0 {
				xlsx.SetCellValue(sheet, fmt.Sprintf("%s%d", column, i+1), name)
			}
			// 写入struct值
			if j == 8{
			//需要转一下格式
				tmp:=elemValue.FieldByName("Duration").String()
				duration,_:=strconv.Atoi(tmp)
				log.Info(duration)
				xlsx.SetCellValue(sheet, fmt.Sprintf("%s%d", column, i+2), duration)

			}else{
				xlsx.SetCellValue(sheet, fmt.Sprintf("%s%d", column, i+2), elemValue.Field(j).Interface())
			}
		}
	}
	return xlsx
}

tips:

func (f *File) SetCellValue(sheet, axis string, value interface{})

第二个参数---单元格,fmt.Sprintf("%s%d", column, i+2),
从 firstCharacter := 65 // start from ‘A’ line 开始,“A2”-“A3”…

2.结构体

type Runtimedevice struct {
	Runtimedevice string `gorm:"column:device_id" xlsx:"devid" json:"devid"`
	Model         string `gorm:"column:model" xlsx:"model"`
	Mac           string `gorm:"column:mac" xlsx:"mac"`
	Sn            string `gorm:"column:sn" xlsx:"sn"`
	Appkey        string `gorm:"column:appkey" xlsx:"appkey"`
	Appversion    string `gorm:"column:appversion" xlsx:"appversion"`
	Startmillis   string `gorm:"column:startmillis" xlsx:"startmillis"`
	Endmillis     string `gorm:"column:endmillis" xlsx:"endmillis"`
	Duration      string `gorm:"column:duration" xlsx:"duration(ms)"`
}

注意tag,既是你的表头字段

3.调用

	f := WriteXlsx("Sheet1", Results)
	// 根据指定路径保存文件
	if err := f.SaveAs(date + "_ums.xlsx"); err != nil {
		println(err.Error())
	}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值