GAS:フォーム送信数上限で打ち切り
GASで,フォーム上限で受付打ち切りのスクリプトを作った.
【条件】
参加上限が決まっていて早いもの勝ちで切りたい
フォームタイトルに既申し込み数を提示したい
上限に達したらメールしてほしい
【手順】
1. フォームを作成する
2. フォーム回答タブ > 「スプレッドシートで表示」クリック,スプシを生成
3. スプシのURL中ほどにIDがあるのでどこかにメモ:"spreadsheets/d/"の右,"/edit~"までの
https://docs.google.com/spreadsheets/d/1wAMguuzldKK....XXXX....l3e2nkP0/edit?resourcekey=&gid=14064xxxxx#gid=14064xxxxx
↑↑ の例だと "1wAMguuzldKK……"の部分
4. フォーム右上ケバブボタン > スクリプトエディタ 起動
5. エディタのソースエリアに以下のコードをコピペで貼り付ける
6. 定数の入力:
originalTitle に固定タイトル
maxCout に受付上限数
ssID に先ほどのID
8. getSheetByNameの中は日本語デフォルトだとこのまま,スプシを変更したらここも変更する
9. シートのF1セルはカウンタ値が入る.カウンタ値はタイトル表示の数値に反映する.普通はいじらなくてOK.
ただし,テストする時は数字が増えるので,正式運用時には正しい数値に戻す必要がある.
以上.
【コード】
参加受付のみ(不参加は送信しない)なので,送信数をカウントするだけ
タイトルと受付上限数はグローバル変数に格納しておく
code:onFormSubmit
// グローバル変数を宣言
var originalTitle = "y24年忘れ会"; // ← 固定タイトル
var maxCount = 13; // ← 受付上限数
var ssID = "フォーム生成のスプシID"
function onFormSubmit(e) {
// スプレッドシートの取得
var spreadsheet = SpreadsheetApp.openById(ssID);
var sheet = spreadsheet.getSheetByName('フォームの回答 1');
// 回答数をカウント
// カウントするセルを指定 (F1セルをカウントする場合)
var countCell = sheet.getRange("F1");
var currentCount = countCell.getValue() || 0;
var newCount = currentCount + 1;
// カウントを更新
countCell.setValue(newCount);
// 回答数がmaxCountを超えたらフォームの受付を停止し、作者にメール送信
if (newCount >= maxCount) {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
// フォームの作者にメール送信
var emailAddress = Session.getActiveUser().getEmail(); // 現在のユーザーのメールアドレスを取得
MailApp.sendEmail(emailAddress, 'フォーム受付終了のお知らせ', 'フォーム「' + form.getTitle() + '」の受付が終了しました。');
}
// 初めて実行されたときだけ、元のタイトルを格納
var form = FormApp.getActiveForm();
// フォームのタイトルを取得し、カウント数と連結
var newTitle = originalTitle + ':受付済=' + currentCount;
form.setTitle(newTitle);
}
以上.