※もしかしたら用語の使い方が間違っているかもしれません。ご了承ください。
Googleフォームで質問に答えて送信すると、スプレッドシートにあらかじめ書かれているテンプレートに反映された文章がメールで送れられてくる…といった仕組みを作りたいと思っています。
例えば、GoogleスプレッドシートのセルA1に
「こんにちは${name}です。年齢は${age}です。」
という文章をあらかじめ書いておきます。
そして、Googleフォームから送信されて取得した名前と年齢のデータをそれぞれ変数name、ageに格納します。
例:name = 山田、age = 25
その後、スプレッドシートに用意したテンプレートに記載されている埋め込み変数に反映させて、sendMail関数で「こんにちは山田です。年齢は25です。」という内容をメール送信します。
通常、Google Apps Scriptでスプレッドシートからデータを取得する場合、
javascript
1sheet.getRange(1, 1).getValue();
で取得することになると思います…が、それですと、先ほど書いた「こんにちは${name}です。年齢は${age}です。」はすべて文字列として取得してしまい、変数が反映されません。
テンプレートリテラルへの変換方法があるのかもしれませんが、ググってもどうしてもわかりませんでした…
テンプレートの中身を自由に変更できる仕様にしたいと思い、なんとかこの機能を実装したいと思っています。ご回答お待ちしております。よろしくお願い致します!
【追記】
一応、GAS側の処理で余分な部分を省いたものを記載しておきます。。。急いでいろいろ省いたので抜けもあるかもしれません…
javascript
1function sendMail(e){ 2 var ss = SpreadsheetApp.openById(ID).getActiveSheet; 3 var row = answerss.getLastRow(); 4 var items = e.response.getItemResponses(); 5 for(var p = 0; p < items.length; p++){ 6 answerss.getRange(row + 1, p + 2).setValue(items[p].getResponse()); 7 } 8//訳あってfor文でスプレッドシートに書き込んでいます 9 10 var row = ss.getLastRow(); 11 var name = ss.getRange(row, 1).getValue(); 12 var age = ss.getRange(row, 2).getValue(); 13 var dataRow = datass.getLastRow(); 14 15 var body = "投稿がありました。"; 16 17 body += ss.getRange(2, 1).getValue(); //ここでテンプレートを読み込んでいる 18 19 GmailApp.sendEmail(メールアドレス, "投稿がありました", body);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/19 10:30
2018/02/19 10:35
2018/02/19 10:40
2018/02/19 10:48
2018/02/19 11:22
退会済みユーザー
2018/02/19 13:36
2018/02/20 00:36