golang监听文件夹的excel文件,如果有更改,则自动同步推送到api
作者:总管理员
时间:2023-03-15 19:36:15
阅读数:622人阅读
我们需要写一个exe软件,实现监听指定目录下的excel表格,如果表格打开并更改了,则自动将更改的数据推送到指定的api接口,实现数据自动更新功能。
使用golang能很方便的编译成exe文件(当然linux也一样),代码也很简洁。创建一个main.go文件,然后go mod tidy安装依赖,之后运行go run main.go就可以了。
main.go的代码如下,只是一个思路,具体代码还是根据使用场景进行修改:
package main
import (
"log"
"github.com/fsnotify/fsnotify"
"github.com/xuri/excelize/v2"
"fmt"
"path"
"io/ioutil"
"net/http"
"bytes"
"encoding/json"
"time"
)
// CREATE 创建文件
// WRITE 写文件
// CHMOD 修改保存文件
// REMOVE 删除文件
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal("启动错误: ", err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
defer close(done)
for {
select {
case event, ok := <-watcher.Events:
// if event.Op&fsnotify.Write == fsnotify.Write {
// fmt.Println("modified file:", event.Name)
// // 在这里处理 Excel 文件的变化
// }
if !ok {
return
}
fmt.Println("文件路径:" + event.Name + "变动类型:" + event.Op.String())
if event.Op.String() == "CREATE" || event.Op.String() == "WRITE"{
time.Sleep(time.Second *3)
readfile(event.Name)
}
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Println("错误: ", err)
}
}
}()
//设置监听目录
err = watcher.Add("./file/")
if err != nil {
log.Fatal("添加监听目录失败:", err)
}
<-done
}
func readfile(file string){
hz := path.Ext(file)//后缀名
if hz == ".txt" {
//读取txt
var bytesData = make([]byte, 128)
bytesData, _ = ioutil.ReadFile(file);
fmt.Println(string(bytesData))
data := make(map[string]interface{})
data["data"] = string(bytesData)
t, _ := json.Marshal(data)
postsj(t)
} else if hz == ".xlsx" || hz == ".xls" {
// 读取excel
f, err := excelize.OpenFile(file)
if err != nil {
fmt.Println(err)
return
}
sheet := f.GetSheetName(0)
rows, err := f.GetRows(sheet)
fmt.Println(rows)
bytesData, _ := json.Marshal(rows)
postsj(bytesData)
}
}
func postsj(bytesData []byte){
resp, _ := http.Post("https://tb.kzhgzs.cn/api/getconfig","application/json", bytes.NewReader(bytesData))
defer resp.Body.close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
记录完毕。
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱: 2554509967@qq.com
下一篇:php通用工资查询系统使用教程