147 lines
3.5 KiB
Go
147 lines
3.5 KiB
Go
package exceldeal
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/xuri/excelize/v2"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
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
|
|
var bSheet string //上月sheet
|
|
var nowMouth = time.Now().Month().String()
|
|
var nowDay = time.Now().Day()
|
|
var M = dateToChinese(nowMouth)
|
|
for key, s := range sheets {
|
|
//// 读取A2单元格的值
|
|
a2value, err := f.GetCellValue(s, "A2")
|
|
if err != nil {
|
|
log.Println(err)
|
|
return nil, nil, err
|
|
}
|
|
//检查月份是否与当前月份相等
|
|
//如果与当前时间的月份相等则记录工作表名称
|
|
if a2value == M && key != 0 {
|
|
sheetName = s
|
|
bSheet = sheets[key-1]
|
|
} else if a2value == M && key == 0 {
|
|
sheetName = s
|
|
bSheet = ""
|
|
}
|
|
}
|
|
rows, _ := f.GetRows(sheetName)
|
|
for i, row := range rows {
|
|
log.Printf("按行读取excel中的值:索引:%v,行值:%v\n", i, row)
|
|
if i == nowDay && nowDay == 1 {
|
|
nowRow := cleanSlice(row)
|
|
remindList = append(remindList, nowRow[3], nowRow[4])
|
|
log.Println("第一分支判断提醒列表:", remindList)
|
|
if len(bSheet) != 0 {
|
|
brows, _ := f.GetRows(bSheet)
|
|
bMRow := brows[len(brows)-1] //上月最后一天
|
|
closeList = append(closeList, cleanSlice(bMRow)[2], cleanSlice(bMRow)[3])
|
|
} else if len(bSheet) == 0 {
|
|
log.Println("没有上个月的excel或者上个月excel的未按顺序排列")
|
|
closeList = append(closeList, "", "")
|
|
}
|
|
|
|
} else if i == nowDay && nowDay == 2 {
|
|
nowRow := cleanSlice(row)
|
|
remindList = append(remindList, nowRow[2], nowRow[3])
|
|
log.Println("第二分支判断提醒列表:", remindList)
|
|
closeList = append(closeList, cleanSlice(rows[nowDay-1])[3], cleanSlice(rows[nowDay-1])[4])
|
|
} else if i == nowDay && nowDay != 1 && nowDay != 2 {
|
|
nowRow := cleanSlice(row)
|
|
remindList = append(remindList, nowRow[2], nowRow[3])
|
|
log.Println("第三分支判断提醒列表:", remindList)
|
|
closeList = append(closeList, cleanSlice(rows[nowDay-1])[2], cleanSlice(rows[nowDay-1])[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
|
|
}
|