LANG SELRCT

コードを書く場所についてはこちら

2017年11月11日土曜日

Google Formの回答を取得する

Google Formを新規作成して
質問1にラジオボタンの選択肢を2つ
質問2に記述式の質問を配置した
こんなフォームがあるとして

質問に回答して送信後


その回答した内容をログに出してみる
ということをやった時のコードです


このリンクから新規Google Formを作成できます
https://docs.google.com/forms/create


スクリプトエディタを開く方法は
こちら


以下のようなコードを書いて
get_item_responsesを実行すると
上のようなログが出ます

コード.gs
function get_item_responses(e) {
  var itemResponses = e.response.getItemResponses();
  var result = [];
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    result.push([question, answer]);
  }
  Logger.log(result);
}
意訳.gs
実行する機能を定義する
回答を取得して
回答を入れるresulという入れ物を用意して
回答の内容の数(=質問の数)だけ以下を繰り返す
回答をひとつずつ取得して
Title(=質問内容)を取得し
回答した内容を取得し
resultに入れる

それらを配列に入れてログに出す




これまでに送信されたすべての回答を取得したい場合

コード.gs
function get_form_responses() {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var all_result = [];
  for (var i = 0; i < formResponses.length; i++) {
    var itemResponses = formResponses[i].getItemResponses();
    var item_result = [];
    for (var j = 0; j < itemResponses.length; j++) {
      var itemResponse = itemResponses[j];
      var question = itemResponse.getItem().getTitle();
      var answer = itemResponse.getResponse();
      item_result.push([question, answer]);
    }
    all_result.push(item_result);
  }
  Logger.log(all_result);
}
意訳.gs
実行する機能を定義する
現在編集しているフォームを取得して
すべての回答を取得して
フォームに回答されたすべての結果(今回以前もすべて)を入れる入れ物を用意して
これまでに回答された数だけ以下を繰り返す
これまでに送信された回答を順番に取得する
回答結果を入れる入れ物を用意して
質問の数だけ以下を繰り返す
回答を順番に取得して
回答のTitle(=質問内容)を取得し
回答の内容を取得し
それらをitem_resultに入れて

all_resultにitem_resultを入れて

all_resultをログに出す




おまけ


オブジェクトでこのように取得したい場合
(※作られるオブジェクトの中身の順番は実行順であるとは限らない)

obj{
        1234 = [質問内容1, 回答内容1],
        5678 = [質問内容2, 回答内容2]
}


送信時にeで受け取りたい場合

コード.gs
function get_item_responses(e) {
  var itemResponses = e.response.getItemResponses();
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var item_id = itemResponse.getItem().getId();
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    obj[item_id] = [question, answer];
  }
  Logger.log(obj);
}


送信時ではなくスクリプトエディタで実行して取得したい場合

コード.gs
function get_latest_response() {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var len = formResponses.length;
  var formResponse = formResponses[(len-1)];
  var itemResponses = formResponse.getItemResponses();
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    var item_id = itemResponse.getItem().getId();
    obj[item_id] = [question, answer];
  }
  Logger.log(obj);
}



おまけ2


オブジェクトでこのように取得したい場合

obj{
  1234= {
    question: 質問1,
    answer: 回答1
  },
 5678= {
    question: 質問2,
    answer: 回答2
  }
}


送信時にeで受け取りたい場合

コード.gs
function get_item_responses(e) {
  var itemResponses = e.response.getItemResponses();
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var text = {};
    var itemResponse = itemResponses[i];
    var item_id = itemResponse.getItem().getId();
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    text["question"] = question;
    text["answer"]= answer;
    obj[item_id] = text;
  }
  Logger.log(obj);
}


送信時ではなくスクリプトエディタで実行して取得したい場合

コード.gs
function get_latest_response() {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var len = formResponses.length;
  var formResponse = formResponses[(len-1)];
  var itemResponses = formResponse.getItemResponses();
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var text = {};
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    var item_id = itemResponse.getItem().getId();
    text["question"] = question;
    text["answer"]= answer;
    obj[item_id] = text;
  }
  Logger.log(obj);
}

おまけ3


送信者のEmailアドレスも取得したい場合


フォームの設定で「メールアドレスを収集する」にチェックを入れておく


送信時にeで受け取りたい場合

コード.gs
function get_item_responses(e) {
  var email = e.response.getRespondentEmail();
  Logger.log(email);
}


送信時ではなくスクリプトエディタで実行して取得したい場合

コード.gs
function get_latest_response() {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var len = formResponses.length;
  var formResponse = formResponses[(len-1)];
  var email = formResponse.getRespondentEmail();
  Logger.log(email);
}