#1.概要
Googleフォームの回答を取得して、Google Apps Script(GAS)でデータの変換やslack送信などをすることができる。
その際のデータの取得方法は何通りかあるものの、私自身GASに触れ始めた頃に迷った記憶があるため、この記事にまとめていく。
#2.以下のフォームを例とする。
今回は、名前は?という質問の答えを取得する。
#3-1.Googleフォームのスクリプトエディタから取得
Googleフォームにはスクリプトエディタが存在する。
##3-1-1.スクリプト
スクリプトエディタに書く内容は以下。
function myFunction(e) {
const applicant = "";
const itemResponse = e.response.getItemResponses();
let name = "";
for (let i = 0; i < itemResponse.length; i++){
const formData = itemResponse[i];
const title = formData.getItem().getTitle();
const response = formData.getResponse();
switch (title) {
case "名前は?":
name = response;
break;
default:
break;
}
}
console.log(name);
}
##3-1-2.トリガー
トリガーは以下のように設定した。
実行する関数:myFunction
イベント:「フォームから」「フォーム送信時」
##3-1-3.解説
console.log(name);
により、ログとしてnameが出力されるようにした。
コアラと回答したものが、以下のように出力されたので、データが取得できたとわかる。
質問のタイトル(今回の場合は「名前は?」)と、case "名前は?"
を同じにすることが肝である。
case "名前は?": name = response; break;
を複数繰り返すことで、複数の質問文の答えをそれぞれ取得することができる。
#3-2.Googleフォームに紐付けたスプレッドシートから取得①
Googleフォームに紐付いた、スプレッドシートのスクリプトエディタにコードを書くことにする。
このスプレッドシートのマークから飛べるところである。
新しく作っても既存のシートを利用してもどちらでも良い。
##3-2-1.スクリプト
スクリプトエディタに書く内容は以下。
function myFunction(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const Sheet = ss.getSheetByName("フォームの回答 1");
const lastRow = Sheet.getLastRow()
const lastColumn = Sheet.getLastColumn()
const data = Sheet.getRange(lastRow,1,1,lastColumn).getValues();
const name = data[0][1];
console.log(name);
}
##3-2-2.トリガー
トリガーは以下のように設定した。
実行する関数:myFunction
イベント:「スプレッドシートから」「フォーム送信時」
##3-2-3.解説
console.log(name);
により、ログとしてnameが出力されるようにした。
コアラ2と回答したものが、以下のように出力されたので、データが取得できたとわかる。
const ss = SpreadsheetApp.getActiveSpreadsheet();
今紐づいているスプレッドシートからデータ取得。
const Sheet = ss.getSheetByName("フォームの回答 1");
「フォームの回答 1」という名前のシートをSheetって命名。
const data = Sheet.getRange(lastRow,1,1,lastColumn).getValues();
Sheetの最終行を一行、dataっていう二次元配列にいれる。
#3-3.Googleフォームに紐付けたスプレッドシートから取得②
##3-3-1.スクリプト
スクリプトエディタに書く内容は以下。
function myFunction(e){
const name = e.values[1];
console.log(name);
}
##3-3-2.トリガー
トリガーは以下のように設定した。
実行する関数:myFunction
イベント:「スプレッドシートから」「フォーム送信時」
##3-3-3.解説
console.log(name);
により、ログとしてnameが出力されるようにした。
コアラ3と回答したものが、以下のように出力されたので、データが取得できたとわかる。
(e)
で、フォームの回答を取得できる。
const timestamp = e.values[0];
で、タイムスタンプを取得できる。
#4.まとめ
いろいろな方法が他にもあると思いますが、以上3通りをまとめました。
ぜひ参考にしてください!!