Google Apps Scriptを使って欠席連絡フォームを作ってみる(4完結)
こんにちは。高校で情報の先生をしていますTakitoです。
ご高覧いただきありがとうございます。
Google Apps Script(GAS)を使った欠席連絡フォームの作成記録です。
前回はGoogleフォームの送信時に、送信内容を本文に記載してメールが送信されるようにしました。
今回は、1-1組の生徒の欠席連絡が届いたら、1-1組の担任にメールが送信される仕組みを作りました。
技術的な話で言えば、Googleスプレッドシートで「担任データ」を作って、Googleフォームからの送信内容のうち、「クラスデータ」を読み取って、「担任データ」のクラスと照合。クラスが合致した担任のメールアドレスへメール送信できるようになりました。
function myFunction(e) {
const items = e.response.getItemResponses();
const subject = '欠席連絡';
let target_class = '' ;
let body = '';
for (let i = 0; i < items.length; i++) {
let item = items[i];
body += item.getItem().getTitle() + ': ' + item.getResponse() + '\n';
if(i == 0){
target_class = item.getResponse() ;
}
}
const address_Sheet = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("シート名");
const lastRow = address_Sheet.getLastRow();
const data = address_Sheet.getRange(1, 1, lastRow, 3).getValues();
for(let j of data ){
if(j[0] == target_class){
email = j[2];
body = j[1] + '先生への連絡\n\n' + body ;
GmailApp.sendEmail(email, subject, body);
}
}
}
前回のコードからだいぶ変わってます。
新しく作った部分を記録しておきます。
コードがそこそこの長さになってきたので、左側に行番号でる機能あるといいな。
1.Googleスプレッドシートで担任データを作成
特に工夫もなくサクッと作成。1-3組のメールアドレスはチェック用のメールアドレスにしてあるので黒塗り。
ちなみに担任名は「名前 生成」でGoogle検索して出てきた、名前自動生成ツールで作りました。実在の人物ではありません。
2.対象クラスの読み取り(9~11行目)
if(i == 0){
target_class = item.getResponse()
}
1つ目の質問を取り出して、メール本文を作る時に、
ついでに変数target_classにクラス名を入れておく。
3.スプレッドシートの読み込み(14~16行目)
const address_Sheet = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("シート名");
const lastRow = address_Sheet.getLastRow();
const data = address_Sheet.getRange(1, 1, lastRow, 3).getValues();
SpreadsheetApp.openById("スプレッドシートID") でスプレッドシートを指定する。スプレッドシートIDはスプレッドシート開いた時のURL「https://docs.google.com/spreadsheets/d/●●●●●●●●●●●●●●●●●●/」
の●●の部分。さらに.getSheetByName("シート名");でシートを指定する。
シート名はスプレッドシートのシートタブに記載の名前。日本語でも大丈夫。読み込んだスプレッドシートは変数address_Sheetに代入。
.getLastRow()を使って、読み込んだスプレッドシートの最終行が何行目かを確認。変数lastRowに代入する。
address_Sheet.getRange(始まりの行, 始まりの列, 読込行の数, 読込列の数)でスプレッドシートの読込範囲を指定する。行数は入力された担任の数によって変わるので、先ほどのlastRowを使う。他の値は変わらないので実数。
.getValues();を使って各行のデータを[ [1-1] , [羽森 大聖] , [aaa@bbb.com] ]のように二次元配列として読み取って変数dataに代入。
4.スプレッドシートから対象クラスの情報を読み取る
for(let j of data ){
if(j[0] == target_class){
email = j[2];
body = j[1] + '先生への連絡\n\n' + body ;
GmailApp.sendEmail(email, subject, body);
}
}
for(let j of data )はdataに代入したスプレッドシートの内容を1行ずつ確認し、dataが無くなるまで(最後の行)まで繰り返す。
j[0](スプレッドシートのクラス)と変数target_classが合致した場合、j[2](スプレッドシートのメールアドレス)を変数emailに代入して、ついでにj[1](スプレッドシートの担任名)も取得してメール本文へ追記。
最後に変数email宛にメールを送信。
「担任データ」の全ての行を確認し、変数target_classとスプレッドシートのクラスが一致すれば送信するので、同じクラスの先生が2名以上いても(担任と副担任のイメージ)両方に同じメールが送られる。
5.動作確認
最後に動作確認。欠席フォームからデータを送信して・・・
メールを確認。上手く動作した。
目的の動作ができたので一応完成にします。次の記事は全体をまとめて、
欠席連絡フォームシリーズは終わり。