質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2117閲覧

GASで、googleフォームの「質問」に対するラジオボタンの「選択肢」を取得する方法を知りたい

T.Nakagawa

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/04/16 11:13

前提・実現したいこと

こちらの記事を参考に、

[Googleフォームで回答数により選択肢を変更する]
https://yukaobu.wordpress.com/2016/10/23/googleform-2/

Googleフォームで、上限付きの申込フォームを作っています。

こちらの方法だと、「質問」に対する「選択肢」を変更するたびに、GASも変更しなければいけません。

これを自動化したいです。

上記の例で言いますと、

フォーム内の「質問」、「参加する時間」に対するラジオボタンの選択肢「13時〜」、「14時〜」、「15時〜」を「14時〜」、「15時〜」、「16時〜」と変更した場合、GASも変更する必要があります。

該当のソースコード

思惑としては、フォームの「質問」に対する「選択肢」を取得して、申込内容を格納している「answer」と比較すれば良いのではないかと考えています。

ただ、googleフォームの「質問」に対するラジオボタンの「選択肢」を取得する方法が、いくら探してもわからず質問させていただきました。

アドバイスいただきたいです。

Google

1function endFormCheck() { 2 var LIMIT_COUNT = 10; //ここで席数上限を設定 3 var ANSWER_LENGTH = 3; //時間帯の数 4 var answerCount = [0,0,0];//カウント用:時間帯の数分配列を準備します 5 var itemID = 0; 6 7 var form = FormApp.getActiveForm(); //アクティブフォームを取得 8 9 var formResponses = form.getResponses(); // 全回答内容を取得 10 11 for (var i = 0; i < formResponses.length; i++) { 12 var formResponse = formResponses[i]; // 回答ひとつ分を取得 13 var itemResponses = formResponse.getItemResponses(); // 質問項目を取得 14 15 for (var j = 0; j < itemResponses.length; j++) { // 回答内容をひとつずつチェック 16 var itemResponse = itemResponses[j]; 17 var question = itemResponse.getItem().getTitle(); 18 var answer = itemResponse.getResponse(); 19 if(question == '参加する時間'){ // 申込み数カウント 20 if(answer == '13時〜'){ answerCount[0]++; } 21 else if( answer == '14時〜'){ answerCount[1]++; } 22 else if( answer == '15時〜'){ answerCount[2]++; } 23 } 24 } 25 } 26 27 // LIMIT_COUNTになっている選択肢があるかチェック 28 var answerCheck = 0; 29 var choiceArray = []; 30 var arrayCount = 0; 31 for(var i = 0; i < ANSWER_LENGTH; i++){ 32 if(answerCount[i] == LIMIT_COUNT){ 33 answerCheck++; 34 } 35 else{ // LIMIT_COUNTになっていない選択肢は残す 36 if ( i == 0 ){ choiceArray[arrayCount] = '13時〜'; arrayCount++; } 37 else if( i== 1 ){choiceArray[arrayCount] = '14時〜'; arrayCount++;} 38 else if( i== 2 ){choiceArray[arrayCount] = '15時〜'; arrayCount++;} 39 } 40 } 41 42 // 全てLIMIT_COUNTなら申込みフォームを受付終了 43 if(answerCheck == ANSWER_LENGTH){ 44 form.setAcceptingResponses(false); 45 } 46 47 // LIMIT_COUNTになっていない選択肢を「参加する時間」の選択肢に設定する 48 if( (answerCheck != ANSWER_LENGTH) && (answerCheck >= 1)){ 49 var items = form.getItems(); 50 for (var i= 0; i< items.length; i++ ){ 51 var item = items[i]; 52 if( item.getTitle() == '参加する時間' ){ 53 var choice = item.asMultipleChoiceItem().getChoices(); 54 item.asMultipleChoiceItem().setChoiceValues(choiceArray); 55 } 56 } 57 } 58}

試したこと

ライブラリから「FormApp」で取得できそうで、上記ソースコードで使っているので、できそうなきがするのですが、具体的にどのように記述したら良いか、わかりませんでした。
https://developers.google.com/apps-script/reference/forms/form-app

ここに問題に対して試したことを記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「質問」に対するラジオボタンの「選択肢」を取得する方法

前提として、提示されたコードに準じ、特定の1項目についてのみの取得となります。
(ラジオボタンが一つしかない)
ロジックの肝はItemとして取得したあとにMultipleChoiceItemとしてキャスト(変換)することですね。

javascript

1/*省略*/ 2var form = FormApp.getActiveForm(); //アクティブフォームを取得 3var choices = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE);//タイプを限定して配列へセット 4var choice = choices[0].asMultipleChoiceItem() 5 .getChoices() 6 .map(function(v){ 7 return v.getValue(); 8 }); 9//choice → ['13時〜','14時〜','15時〜'] 10/*省略*/

上記でchoiceとして配列にセットしていますので、適宜参照して処理を実行すれば良いかと思います。
以上、動作確認等はしておりませんので、参考になれば幸いです。

投稿2018/04/17 03:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

T.Nakagawa

2018/04/17 11:57

アドバイスありがとうございます! まさに、やりたかったことが叶いました^^ 助かりました!ありがとうございます!
退会済みユーザー

退会済みユーザー

2018/04/17 13:14

何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問