package exceldeal import ( "encoding/json" "github.com/xuri/excelize/v2" "log" "os" "strings" "time" ) var nowMouth = time.Now().Month().String() var nowDay = time.Now().Day() var M = dateToChinese(nowMouth) func JsonDeal(file string, remindList []string, closeList []string) (r, c []string) { emailJson, err := os.ReadFile(file) if err != nil { log.Printf("打开邮箱json文件失败,错误是:%v\n", err) return } var email map[string]string err = json.Unmarshal(emailJson, &email) if err != nil { log.Printf("json反序列化失败:%v\n", err) return nil, nil } for k, v := range email { for _, m := range remindList { if k == m { r = append(r, v) } } for _, m := range closeList { if k == m { c = append(c, v) } } } return r, c } // 寻找当前月的值班表,并且得到应该提醒的传值和关闭的传值 func GetSheetName(file string) (remindList, closeList []string, err error) { f, err := excelize.OpenFile(file) if err != nil { return } defer f.Close() //遍历所有工作表的A2格 sheets := f.GetSheetMap() var sheetName string for _, s := range sheets { //// 读取A2单元格的值 a2value, err := f.GetCellValue(s, "A2") if err != nil { log.Println(err) return nil, nil, err } //检查月份是否与当前月份相等 //如果与当前时间的月份相等则记录工作表名称 if a2value == M { sheetName = s } } rows, _ := f.GetRows(sheetName) for i, row := range rows { log.Printf("按行读取excel中的值:索引:%v,行值:%v\n", i, row) if i == nowDay { nowRow := cleanSlice(row) remindList = append(remindList, nowRow[2], nowRow[3]) } else if i == nowDay-1 { yesterdayRow := cleanSlice(row) closeList = append(closeList, yesterdayRow[2], yesterdayRow[3]) } } return remindList, closeList, nil } func dateToChinese(m string) (M string) { switch m { case "January": M = "一月" case "February": M = "二月" case "March": M = "三月" case "April": M = "四月" case "May": M = "五月" case "June": M = "六月" case "July": M = "七月" case "August": M = "八月" case "September": M = "九月" case "October": M = "十月" case "November": M = "十一月" case "December": M = "十二月" } return M } func cleanSlice(strSlice []string) (cleanedSlice []string) { for _, s := range strSlice { cleaned := strings.TrimSpace(s) if cleaned != "" { cleanedSlice = append(cleanedSlice, cleaned) } } return cleanedSlice }