golang 根据excel文件模板创建文件

252 阅读2分钟

整体代码显示

func Create_weather_factdatainfo_excel(filePath string, datalist []Olddatainfo) error {
        // 打开模板文件
	f, err := excelize.OpenFile("./uploads/modefile/modefile.xlsx")
	if err != nil {
		fmt.Println(err)
		return err
	}
	list := []string{"D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"}
	count := 0
	for i, a := range datalist[0].Datalist {
		f.SetCellValue("sheet1", list[count]+"2", i)
		count += 1
		fmt.Println(a)
	}
	for v, datainfo := range datalist {
		acount := 0
		f.SetCellValue("sheet1", "A"+strconv.Itoa(3+v), datainfo.Createtime)
		f.SetCellValue("sheet1", "B"+strconv.Itoa(3+v), datainfo.Eqname)
		f.SetCellValue("sheet1", "C"+strconv.Itoa(3+v), datainfo.Etypename)
		for _, a := range datainfo.Datalist {
			if a == "" {
				a = "-"
			}
			f.SetCellValue("sheet1", list[acount]+strconv.Itoa(3+v), a)
			acount += 1
		}
	}
	// 根据指定路径保存文件
	if err := f.SaveAs(filePath); err != nil {
		return err
	}
	return err
}

Olddatainfo 结构体

type Olddatainfo struct {
	Createtime string
	Eqid       string
	Eqname     string
	Etype      string
	Etypename  string
	Datalist   map[string]string
}

datalist 数值

"datalist": [
		{
			"Createtime": "2022-04-28 17:17:26 ",
			"Eqid": "37",
			"Eqname": "",
			"Etype": "1",
			"Etypename": "",
			"Datalist": {
				"O2含量": "",
				"一氧化碳": "",
				"二氧化硫": "",
				"氮氧化物": "",
				"流量": "",
				"烟尘": "",
				"烟气动压": "",
				"烟气压力": "",
				"烟气流速": "",
				"烟气温度": "",
				"烟气湿度": ""
			}
		},
		{
			"Createtime": "2022-04-12 15:31:46 ",
			"Eqid": "14",
			"Eqname": "",
			"Etype": "1",
			"Etypename": "",
			"Datalist": {
				"O2含量": "",
				"一氧化碳": "",
				"二氧化硫": "",
				"氮氧化物": "",
				"流量": "",
				"烟尘": "",
				"烟气动压": "",
				"烟气压力": "",
				"烟气流速": "",
				"烟气温度": "",
				"烟气湿度": ""
			}
		},
		{
			"Createtime": "2022-04-12 15:25:56 ",
			"Eqid": "14",
			"Eqname": "",
			"Etype": "1",
			"Etypename": "",
			"Datalist": {
				"O2含量": "",
				"一氧化碳": "",
				"二氧化硫": "",
				"氮氧化物": "",
				"流量": "",
				"烟尘": "",
				"烟气动压": "",
				"烟气压力": "",
				"烟气流速": "",
				"烟气温度": "",
				"烟气湿度": ""
			}
		}
	]

详解

list := []string{"D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"}
	count := 0
	for i, a := range datalist[0].Datalist {
		f.SetCellValue("sheet1", list[count]+"2", i) // 写入表头
		count += 1
		fmt.Println(a)
	}

返回的datalist数值中,etype类型不同,返回的Datalist也会随之变化,自定义一个list数组多设置一些表 头,这里目前是设置了15个,for循环列出第一组数据中的Datalist的关键字并对应list数组中的位置写入表 头。

f.SetCellValue("sheet1", "A"+strconv.Itoa(3+v), datainfo.Createtime)

对应位置写入数据

返回结果

模板文件内容

image.png

导出文件内容

image.png