Googleフォームを使って、チェックボックスごとに申込できる数の制限をかけたいと思っております。
やりたいことは
・複数回答可能(チェックボックス)
・各回答ごとに制限を設ける
・制限数は各項目で変わる
予約の時間帯によって、受入人数が変わるが、通し参加も可能という状態です。
gs
1function myFunction() { 2 //var LIMIT_COUNT = 10; //ここで席数上限を設定 3 var ANSWER_LENGTH = 5; //時間帯の数 4 var answerCount = [0,0,0,0,0];//カウント用:時間帯の数分配列を準備します 5 // テスト用 6 var limitCnt = [2, 1, 1, 1, 2]; 7 var itemID = 0; 8 9 var form = FormApp.getActiveForm(); //アクティブフォームを取得 10 11 var formResponses = form.getResponses(); // 全回答内容を取得 12 13 for (var i = 0; i < formResponses.length; i++) { 14 var formResponse = formResponses[i]; // 回答ひとつ分を取得 15 var itemResponses = formResponse.getItemResponses(); // 質問項目を取得 16 17 for (var j = 0; j < itemResponses.length; j++) { // 回答内容をひとつずつチェック 18 var itemResponse = itemResponses[j]; 19 var question = itemResponse.getItem().getTitle(); 20 var answer = itemResponse.getResponse(); 21 if(question == '参加する時間'){ // 申込み数カウント 22 if(answer == '11時〜'){ answerCount[0]++; } 23 else if( answer == '13時〜'){ answerCount[1]++; } 24 else if( answer == '15時〜'){ answerCount[2]++; } 25 else if( answer == '17時〜'){ answerCount[3]++; } 26 else if( answer == '19時〜'){ answerCount[4]++; } 27 } 28 } 29 } 30 31 // LIMIT_COUNTになっている選択肢があるかチェック 32 var answerCheck = 0; 33 var choiceArray = []; 34 var arrayCount = 0; 35 for(var i = 0; i < ANSWER_LENGTH; i++){ 36 if(answerCount[i] == limitCnt[i]){ 37 answerCheck++; 38 } 39 else{ // LIMIT_COUNTになっていない選択肢は残す 40 if ( i == 0 ){ choiceArray[arrayCount] = '11時〜'; arrayCount++; } 41 else if( i== 1 ){choiceArray[arrayCount] = '13時〜'; arrayCount++;} 42 else if( i== 2 ){choiceArray[arrayCount] = '15時〜'; arrayCount++;} 43 else if( i== 3 ){choiceArray[arrayCount] = '17時〜'; arrayCount++;} 44 else if( i== 4 ){choiceArray[arrayCount] = '19時〜'; arrayCount++;} 45 } 46 } 47 48 // 全てLIMIT_COUNTなら申込みフォームを受付終了 49 if(answerCheck == ANSWER_LENGTH){ 50 form.setAcceptingResponses(false); 51 } 52 53 // LIMIT_COUNTになっていない選択肢を「参加する時間」の選択肢に設定する 54 if( (answerCheck != ANSWER_LENGTH) && (answerCheck >= 1)){ 55 var items = form.getItems(); 56 for (var i= 0; i< items.length; i++ ){ 57 var item = items[i]; 58 if( item.getTitle() == '時間帯' ){ 59 var choice = item.asMultipleChoiceItem().getChoices(); 60 item.asCheckboxItem().setChoiceValues(choiceArray); 61 } 62 } 63 } 64} 65
https://yukaobu.wordpress.com/2016/10/23/googleform-2/
参考にしたのは上記サイトです。もともと使われていなかったものはそのままにしてます。
トリガーはフォーム送信時に設定してます。
今の状況は、リミット1のものにチェックをいれた状態で送信しても、次にフォーム遷移した時に変わっていない状態です。
実行ログにエラーは出てません。
助言よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。