使用GO操作excel檔案並傳送email

2021-08-01 18:30:33 字數 1969 閱讀 6691

情景:將工資條的內容傳送到相應員工的郵箱中。

xlsx檔案內容格式:

獲取excel檔案內容,使用第三方庫:github.com/tealeg/xlsx

/* 通過for迴圈獲取**中單元格的內容 */

for _, sheet := range xlfile.sheet}}

}知識點:

xlsx操作excel檔案先獲取sheet物件,代表excel檔案的sheet,通過遍歷sheet物件,獲取每個sheet的行結果rows,對rows遍歷,就獲取到了每個單元格的內容,封裝在cells物件中。

func isemailrow(r string) (isemail bool, email string)  @([a-za-z0-9-].)[a-za-z]$`)

/* 遍歷r中內容,匹配正規表示式 */

for _, v := range r

}return

false, ""

}

isemailrow函式接收的引數是陣列,所以將單元格內容轉換為陣列形式,並且去除了空格和空行:

func _getcellvalues(r *xlsx.row) (cells string)  

return

}

使用map來儲存每個人的工資條資料,並且用電子郵件作為鍵值,然後將資料組裝成乙個html的**行**(因為需要傳送html格式的電子郵件才能以**的形式展現)。於是,main裡的迴圈**就變成了這樣:

/* 建立map */

sendlist := make(map[string]string)

for _, sheet := range xlfile.sheets

sendlist[curmail] += fmt.sprintf("%s

", strings.join(cells, "

")) }

}

傳送電子郵件

使用標準包:net/smtp就可以傳送電子郵件

封裝乙個函式:

func

sendtomail(user, password, host, to, subject, body, mailtype

string) error

建立乙個函式,遍歷所有內容並呼叫傳送郵件函式傳送出去

func sendmail(sendlist map[string]string)  else 

index++

fmt.printf("%s

\n", content)}}

最後的main函式:

excelfilename := "f:\\test\\list.xlsx"

xlfile, err := xlsx.openfile(excelfilename)

if err != nil

sendlist := make(map[string]string)

for _, sheet := range xlfile.sheets else

}if count >1 else }}

}sendmail(sendlist)

fmt.print("按下回車結束")

bufio.newreader(os.stdin).readline()

親測可用。作為學習收藏。

go檔案操作

go語言支援的檔案操作很多 1 傳統的檔案操作 匯入檔案操作需要的包 import os f os.open filepath f.read byte f.close 這裡寫 片openfile,err os.open test.go 正確開啟檔案返回err nil 這裡如果檔案開啟異常,則丟擲錯誤...

go檔案操作

os.open 函式能夠開啟乙個檔案,返回乙個開啟的檔案物件和乙個err。對得到的檔案物件呼叫close 方法能夠關閉檔案 為了防止檔案忘記關閉,我們通常使用defer關閉檔案 是向作業系統要了乙個檔案io,如果程式沒有顯示的關閉檔案,就不會釋放這個檔案io,造成檔案不安全 func main 關閉...

Go併發程式設計之CAS操作

一 前言 go語言類似j a juc包也提供了一些列用於多執行緒之間進行同步的措施,比如低階的同步措施有 鎖 cas 原子變數操作類。相比j a來說go提供了獨特的基於通道的同步措施。我們先來看看go中cas操作 二 cas操作 go中的cas操作與j a中類似,都是借用了cpu提供的原子性指令來實...