modifyudeskstate/exceldeal/exceldeal.go

147 lines
3.5 KiB
Go
Raw Normal View History

2024-07-21 02:13:35 +08:00
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
2024-07-26 17:22:20 +08:00
var bSheet string //上月sheet
var nowMouth = time.Now().Month().String()
var nowDay = time.Now().Day()
var M = dateToChinese(nowMouth)
for key, s := range sheets {
2024-07-21 02:13:35 +08:00
//// 读取A2单元格的值
a2value, err := f.GetCellValue(s, "A2")
if err != nil {
log.Println(err)
return nil, nil, err
}
//检查月份是否与当前月份相等
//如果与当前时间的月份相等则记录工作表名称
2024-07-26 17:22:20 +08:00
if a2value == M && key != 0 {
sheetName = s
bSheet = sheets[key-1]
} else if a2value == M && key == 0 {
2024-07-21 02:13:35 +08:00
sheetName = s
2024-07-26 17:22:20 +08:00
bSheet = ""
2024-07-21 02:13:35 +08:00
}
}
rows, _ := f.GetRows(sheetName)
for i, row := range rows {
log.Printf("按行读取excel中的值:索引:%v,行值:%v\n", i, row)
2024-07-26 17:22:20 +08:00
if i == nowDay && nowDay == 1 {
2024-07-21 02:13:35 +08:00
nowRow := cleanSlice(row)
2024-07-26 17:22:20 +08:00
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, "", "")
}
2024-07-21 02:13:35 +08:00
2024-07-26 17:22:20 +08:00
} 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])
2024-07-21 02:13:35 +08:00
}
2024-07-26 17:22:20 +08:00
2024-07-21 02:13:35 +08:00
}
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
}