LoginSignup
20
29

More than 3 years have passed since last update.

Google Apps Script(GAS)でGoogleフォーム送信時にデータを取得する方法3通り

Last updated at Posted at 2020-08-30

1.概要

Googleフォームの回答を取得して、Google Apps Script(GAS)でデータの変換やslack送信などをすることができる。
その際のデータの取得方法は何通りかあるものの、私自身GASに触れ始めた頃に迷った記憶があるため、この記事にまとめていく。

2.以下のフォームを例とする。

スクリーンショット 2020-08-29 19.09.09.png
今回は、名前は?という質問の答えを取得する。

3-1.Googleフォームのスクリプトエディタから取得

Googleフォームにはスクリプトエディタが存在する。
スクリーンショット 2020-08-29 19.21.57.png

3-1-1.スクリプト

スクリプトエディタに書く内容は以下。

GAS
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;

を複数繰り返すことで、複数の質問文の答えをそれぞれ取得することができる。

スクリーンショット 2020-08-30 21.48.38.png

3-2.Googleフォームに紐付けたスプレッドシートから取得①

Googleフォームに紐付いた、スプレッドシートのスクリプトエディタにコードを書くことにする。
スクリーンショット 2020-08-30 22.04.44.png
このスプレッドシートのマークから飛べるところである。
新しく作っても既存のシートを利用してもどちらでも良い。

スクリーンショット 2020-08-30 22.08.55.png

3-2-1.スクリプト

スクリプトエディタに書く内容は以下。

GAS
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っていう二次元配列にいれる。
スクリーンショット 2020-08-30 22.48.09.png

3-3.Googleフォームに紐付けたスプレッドシートから取得②

3-3-1.スクリプト

スクリプトエディタに書く内容は以下。

GAS
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];
で、タイムスタンプを取得できる。

スクリーンショット 2020-08-30 23.07.48.png

4.まとめ

いろいろな方法が他にもあると思いますが、以上3通りをまとめました。
ぜひ参考にしてください!!

20
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
29