| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package main
- import (
- "errors"
- "github.com/sirupsen/logrus"
- "github.com/xuri/excelize/v2"
- "strconv"
- "time"
- )
- var (
- log = logrus.WithField("module", "main")
- excelHandle *excelize.File
- ids []string
- startId = 25120001
- endId = 25120060
- )
- func init() {
- logrus.SetReportCaller(true)
- logrus.SetFormatter(&logrus.TextFormatter{
- //以下设置只是为了使输出更美观
- DisableColors: false,
- DisableTimestamp: false,
- TimestampFormat: "2006-01-02 15:04:05",
- })
- //logger := &lumberjack.Logger{
- // Filename: "./pest.log",
- // MaxSize: 500, // 日志文件大小,单位是 MB
- // MaxBackups: 3, // 最大过期日志保留个数
- // MaxAge: 28, // 保留过期文件最大时间,单位 天
- // LocalTime: true, // 使用本地时间
- // Compress: true, // 是否压缩日志,默认是不压缩。这里设置为true,压缩日志
- //}
- //logrus.SetOutput(logger) // logrus 设置日志的输出方式
- for i := startId; i <= endId; i++ {
- ids = append(ids, strconv.Itoa(i))
- }
- }
- func addSheetHeader(id string, row string) error {
- var tmp []interface{}
- tmp = append(tmp, "id")
- for i := 0; i < 21; i++ {
- tmp = append(tmp, "通用数据-"+strconv.Itoa(i))
- }
- tmp = append(tmp, "更新时间")
- if err := excelHandle.SetSheetRow(id, row, &tmp); err != nil {
- log.Errorf("插入表格错误(%s):%v", id, err)
- return err
- }
- return nil
- }
- func putDataToSheet(id string, row string, data []SDData) error {
- var tmp []interface{}
- if len(data) != 21 {
- return errors.New("数据长度不对")
- }
- tmp = append(tmp, id)
- for _, d := range data {
- tmp = append(tmp, d.Data)
- }
- tmp = append(tmp, data[0].Time)
- if err := excelHandle.SetSheetRow(id, row, &tmp); err != nil {
- log.Errorf("插入表格错误(%s):%v", id, err)
- return err
- }
- return nil
- }
- func main() {
- var err error
- log.Info("start")
- //excelHandle, err = excelize.OpenFile("real.xlsx")
- //if err != nil {
- // log.Errorf("打开Excel失败", err)
- //}
- log.Info("新建 excel 表格")
- excelHandle = excelize.NewFile()
- defer excelHandle.Close()
- err = excelHandle.SaveAs(time.Now().Format("20060102150405") + ".xlsx")
- if err != nil {
- log.Errorf("保存文件失败%v", err)
- }
- //新建所有sheet
- for _, id := range ids {
- if _, err := excelHandle.NewSheet(id); err != nil {
- log.Errorf("新建表格错误(%s):%v", id, err)
- continue
- }
- if err := addSheetHeader(id, "A1"); err != nil {
- log.Errorf("增加表头错误(%s):%v", id, err)
- }
- }
- err = excelHandle.DeleteSheet("Sheet1")
- if err != nil {
- log.Error("删除默认sheet 失败", err)
- }
- //base := "http://dataupload.nongtt.com/devdata/GetSensorData?key=Nongtt0020251204"
- base := "http://dataupload.nongtt.com/devdata/GetSensorData?key=Nongtt00"
- col := 2
- for true {
- for _, id := range ids {
- url := base + id
- log.WithField("id", id).Info("获取数据")
- data, err := FetchAndParseData(url)
- if err != nil {
- log.Errorf("获取数据失败%v", err)
- continue
- }
- log.WithField("id", id).Info("获取完成, 准备插入数据")
- //for i, datum := range data.Data {
- // var tmp []interface{}
- // tmp = append(tmp, datum.Key, datum.Addr, datum.Code, datum.Name, datum.Data, datum.Time)
- //
- // if err := excelHandle.SetSheetRow(id, "A"+strconv.Itoa(i+1), &tmp); err != nil {
- // log.Errorf("插入表格错误(%s):%v", id, err)
- // }
- //}
- if err := putDataToSheet(id, "A"+strconv.Itoa(col), data.Data); err != nil {
- log.Error("插入表格错误(%s):%v", id, err)
- continue
- }
- log.WithField("id", id).Info("插入数据 完成")
- }
- if err := excelHandle.Save(); err != nil {
- log.Error("保存文件失败%v", err)
- continue
- }
- log.Info("保存 完成")
- time.Sleep(time.Minute)
- col++
- }
- }
|