126 lines
2.5 KiB
Go
126 lines
2.5 KiB
Go
|
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
|
||
|
}
|