modifyudeskstate/exceldeal/exceldeal.go

125 lines
2.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 nowMouth = time.Now().Month().String()
var nowDay = time.Now().Day()
var M = dateToChinese(nowMouth)
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
}