整体代码显示
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)
对应位置写入数据