LoginSignup
0
0

Goでテンプレート文書を使用して文書を作成する

Last updated at Posted at 2024-04-10

会社名やメールアドレス等を一覧化しているExcelを読み込み、読み込んだ内容をもとにテンプレート文書に従ったメール本文を作成する、ということを行ったのでその方法をまとめます。

GoでExcelのデータを読み込む方法は先日別でまとめたので、こちらをご参照ください。

Goでテンプレート文書を使用するには

公式パッケージである、text/template を使用します。

テンプレート文書の作成

まず、テンプレート文書を作成します。

今回、Excelの一覧にある宛先に、年末年始の休業期間のメールを作成するとします。
テンプレート文書は.tmplの拡張子で保存します。

テンプレート文書内で、{{.メンバ名}}の形式で構造体のメンバーを指定することで、動的に値を挿入することが可能となります。

mail.tmpl
件名: 年末年始の休業期間に関するお知らせ

{{.CompanyName}}
{{.Name}} 様

いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。

休業期間: 2023年12月29日 から 2024年1月5日 まで

上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。

何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。

[連絡先]
[会社名]
[電話番号]
[メールアドレス]

お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。

来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。

敬具

テンプレート文書の指定箇所に値を挿入する

{{.CompanyName}}{{.Name}}に、Excelの一覧にある値を挿入します。
挿入したメール文章を会社名.txtのファイルにそれぞれ保存します。

main.go
package main

import (
	"fmt"
	"text/template"
	"os"

	"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)
	}

    // mail.tmplのテンプレート文書を読み込む
    tmpl, err := template.ParseFiles("./template/mail.tmpl")
    if err != nil {
        fmt.Println(err)
    }
    
	for _, atesaki := range atesakiList {
        // 保存先のファイルを作成する
		fn, err := os.Create(atesaki.CompanyName + ".txt")
		if err != nil {
			fmt.Println(err)
		}
        defer fn.Close()
        
        // 値を挿入し、テンプレート文書からメール文章を作成・ファイル保存する
		if err = tmpl.Execute(fn, atesaki); err != nil {
			fmt.Println(err)
		}
	}
}

作成したファイルの一例が下記となります。

B株式会社.txt
件名: 年末年始の休業期間に関するお知らせ

B株式会社
山田花子 様

いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。

休業期間: 2023年12月29日 から 2024年1月5日 まで

上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。

何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。

[連絡先]
[会社名]
[電話番号]
[メールアドレス]

お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。

来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。

敬具

おわりに

メール本文を一括で作成することができました!
今回はこの作成したメール本文をコピペで送信したんですが、メール送信まで一括で行うプログラムも作成したいと思っています。
また実装できたらまとめていきますので、そのときはよろしくお願いします!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0