go 写入数据到excel

4,568 阅读1分钟

package createExecel

import (
	"fmt"
	"ginblog/azureBill/azmode"
	"ginblog/azureBill/chanpip"
	"github.com/tealeg/xlsx"
	"reflect"
	"sync/atomic"
)


type Excel struct {
	File *xlsx.File
	Sheet *xlsx.Sheet
	Count int
	LenHead int
}

// 保存到文件
func (e *Excel)Save(fileName string) error {
	if err := e.File.Save(fileName); err!=nil{
		return err
	}
	return nil
}

//获取结构体字段名称
func GetModeField(mode interface{}) []string {
	var (
		headList []string
		name string
	)
	headList = make([]string, 0)
	t := reflect.TypeOf(mode)
	for i:=0;i<t.NumField();i++{
		name = t.Field(i).Name
		headList = append(headList, name)
	}
	return headList
}


//创建excel
func NewExcel(headList []string)(*Excel, error) {
	var(
		err error
		sheet *xlsx.Sheet
		row *xlsx.Row

	)
	file := xlsx.NewFile()
	if sheet, err = file.AddSheet("Sheet1"); err !=nil{
		fmt.Println(err)
		return nil, err
	}
	//设置表头
	row = sheet.AddRow()
	row.SetHeightCM(1)
	row.WriteSlice(&headList, len(headList))

	return &Excel{File:file, Sheet:sheet, LenHead:len(headList)}, nil
}


//写入数据到excel
func (e *Excel)WriteLine(rest azmode.ResultMode, len int)  {
	row := e.Sheet.AddRow()
	row.SetHeightCM(1)
	row.WriteStruct(&rest, len)
	e.Count ++
}