Excelに一覧として持っているメールアドレスや会社名などの情報を読み込み、処理に使用するよう構造体へ格納する、ということを行ったため、Goで実装する方法をまとめます。
GoでExcelの操作をするには
excelize というライブラリを使用します。
excelizeのインストール
下記コマンドを実行して、excelizeをインストールします。
$ go get github.com/xuri/excelize/v2
Excelファイルを読み込む
Excelファイルを読み込みます。
今回は以下のような、リストを持つファイルをあらかじめ作成しました。
ファイル名: 宛先.xlsx
会社名 | 担当者名 | メールアドレス |
---|---|---|
株式会社A | 田中太郎 | tanaka@example.com |
B株式会社 | 山田花子 | yamada@example.com |
C企画有限会社 | 佐藤一郎 | sato@example.com |
main.go
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("./excel/宛先.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// リストが載っているシートすべての行を取得
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
// 取得した行の各カラムを表示
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
$ go run main.go
会社名 担当者名 メールアドレス
株式会社A 田中太郎 tanaka@example.com
B株式会社 山田花子 yamada@example.com
C企画有限会社 佐藤一郎 sato@example.com
読み込んだセルの値を構造体に格納
読み込んだセルの値を後の処理で使用できるように、構造体に格納します。
main.go
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
type atesakiType struct {
CompanyName string
Name string
Mail string
}
func main() {
f, err := excelize.OpenFile("./excel/宛先.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// リストが載っているシートすべての行を取得
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
// 構造体リストに格納
var atesakiList []*atesakiType
for index, row := range rows {
// 1行目はヘッダーなので除外
if index < 1 {
continue
}
atesaki := &atesakiType{
CompanyName: row[0],
Name: row[1],
Mail: row[2],
}
atesakiList = append(atesakiList, atesaki)
}
for _, atesaki := range atesakiList {
fmt.Println("会社名: " + atesaki.CompanyName)
fmt.Println("担当者名: " + atesaki.Name)
fmt.Println("メールアドレス: " + atesaki.Mail)
}
}
$ go run main.go
会社名: 株式会社A
担当者名: 田中太郎
メールアドレス: tanaka@example.com
会社名: B株式会社
担当者名: 山田花子
メールアドレス: yamada@example.com
会社名: C企画有限会社
担当者名: 佐藤一郎
メールアドレス: sato@example.com
おわりに
Excelの値をGoで読み込む方法をまとめました。
この読み込んだ値をもとに、各宛先へテンプレートに従ったメールを作成したのですが、そちらについてはまた後ほどまとめたいと思います。