[GAS]フォーム未回答者へ督促メール送信(その3)最後の回答者が回答した時点で自分宛てに完了メールを送信
前回まで「トリガー」を用い、あらかじめ指定した時間にGoogleフォーム未回答者を判別し、督促メールを送信するスクリプトを紹介しました。
前回では「あらかじめ設定したトリガー発動時に未回答者がいない場合 = 自分宛てに「完了しました」メールを送信する」というスクリプトを書きましたが、実際には「最後の回答者が回答した時点で自分宛てに「完了しました」メールを送信する」としたほうが実用的です。
トリガーでは「フォーム送信時]」に発動できるので、今回は
●未回答者がいる場合 = 何もしない
●未回答者がいない場合 = 自分宛てに「完了しました」メールを送信
という条件分岐を設定します。
フォームはこちら。
function formAnswer3() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const memberSheet = ss.getSheetByName("allMember");
const answerSheet = ss.getSheetByName("フォームの回答1");
//シート[allMember]から全員のメアド、[フォームの回答1]から回答済みメンバーのメアドを取得
const array01 = memberSheet.getRange(2, 2, memberSheet.getLastRow() - 1).getValues().flat();
const array02 = answerSheet.getRange(2, 2, answerSheet.getLastRow() - 1).getValues().flat();
const array03 = [];
//pushメソッドを用い差分をarray03に代入
for (const num of array01) {
if (!array02.includes(num)) {
array03.push(num);
}
}
const mailSheet = ss.getSheetByName("mail");
const recipient = array03;
const subject = mailSheet.getRange(1, 2).getValue();
const body = mailSheet.getRange(2, 2).getValue();
// GmailApp.sendEmail(recipient, subject, body); //メール送る
// GmailApp.createDraft(recipient, subject, body); //メール下書き
}
function checkMember() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const memberSheet = ss.getSheetByName("allMember");
const answerSheet = ss.getSheetByName("フォームの回答1");
//シート[allMember]から全員のメアド、[フォームの回答1]から回答済みメンバーのメアドを取得
const array01 = memberSheet.getRange(2, 2, memberSheet.getLastRow() - 1).getValues().flat();
const array02 = answerSheet.getRange(2, 2, answerSheet.getLastRow() - 1).getValues().flat();
const array03 = [];
//pushメソッドを用い差分をarray03に代入
for (const num of array01) {
if (!array02.includes(num)) {
array03.push(num);
}
}
//未回答者がいなかったら完了メールを自分宛てに送信
if (array03 == '') {
const myAddress = 'me@example.com'; //自分のメアドを設定
const mail2Sheet = ss.getSheetByName('mail2');
const subject2 = mail2Sheet.getRange(1, 2).getValue();
const body2 = mail2Sheet.getRange(2, 2).getValue();
GmailApp.sendEmail(myAddress, subject2, body2); //完了メールを自分宛てに送信
//予め設定したトリガーを削除
const triggers = ScriptApp.getProjectTriggers();
for (const trigger of triggers) {
if (trigger.getHandlerFunction() == "formAnswer3") {
ScriptApp.deleteTrigger(trigger);
}
}
}
}
トリガーはそれぞれ以下のように設定します。
function [formAnswer3] = 締め切りの前日、前々日など
function [checkMember] = フォーム送信時
「フォーム送信時」のトリガー設定は以下の通り。
以下の部分で「あらかじめ設定したトリガーを削除」を実装します。
未回答者に督促メールを送信する日(締め切りの前日、前々日など)よりも前に全員の回答が集まった場合、トリガーで設定したformAnswer3関数は実行不要なので削除します。
//予め設定したトリガーを削除
const triggers = ScriptApp.getProjectTriggers();
for (const trigger of triggers) {
if (trigger.getHandlerFunction() == "formAnswer3") {
ScriptApp.deleteTrigger(trigger);
}
}
これでだいぶ実用的なスクリプトになりました。
この記事が気に入ったらサポートをしてみませんか?