GoogleフォームとGoogle Apps Script(GAS)を組み合わせて開発していると、 「どの項目がどの質問かをどう判別するの?」という壁にぶつかることがあります。
特に getItemResponses()
で回答をループ処理する場合、 その回答がどの質問に対応するのかを知るには「項目ID(itemId)」を利用する方法が確実です。
回答ID(itemId)の取得方法
まず、以下のコードをスクリプトエディタに貼り付けて実行すると、フォームに含まれるすべての質問のタイトルとIDを一覧でログ出力できます。
- フォームの画面右上「︙(メニュー)」→「スクリプトエディタ」を開きます。
- 新しいスクリプトファイルに、下記のコードを貼り付けます。
- 上部メニューの「関数を選択」→
logFormItemIds
を選び、「▶実行」ボタンをクリック。 - 「表示」→「ログ」から出力されたID一覧を確認できます。
function logFormItemIds() {
const form = FormApp.openById("フォームIDをここに記入"); // フォームIDの取得方法は下で解説
const items = form.getItems();
items.forEach(function(item) {
Logger.log(`Title: ${item.getTitle()} / ID: ${item.getId()}`);
});
}
👉ログの出力方法についてはこちらでご紹介しています。
フォームIDの取得方法
フォームのURLが次のようになっている場合、赤字部分が「フォームID」です。
https://docs.google.com/forms/d/1AbCDEFG_HIJKL1234567890abcdefg/viewform
これをopenById()
に渡せば、スクリプトからそのフォームにアクセスできます。
⚠️ メールアドレスは項目IDで取得できない!
Googleフォームの設定で「メールアドレスを収集する」にチェックを入れていると、 回答者のメールアドレスが取得できますが、これは通常の項目とは別扱いです。
そのため、getItems()
で一覧を出しても、メールアドレスの項目は表示されません。
📌 メールアドレスを取得するにはこちらを使います:
const email = e.response.getRespondentEmail();
Logger.log("送信者メールアドレス:" + email);
メールアドレスだけは特別扱いされている点に注意しましょう。
回答内容をIDで振り分けたいとき
スクリプト内で各項目の値を正確に仕分けたいときは、以下のように書きます。
(例)itemID=1234567890だったら、lastNameという項目に値をセット
for (const itemResponse of e.response.getItemResponses()) {
const itemId = itemResponse.getItem().getId();
const answer = itemResponse.getResponse();
if (itemId === 1234567890) {
response.lastName = answer;
}
}
このようにIDで判断すれば、項目順が入れ替わってもスクリプトが壊れません。
📬 SendGridでメールを送る方法は別記事で解説します!
回答内容を使って、ユーザーに自動返信メールを送る仕組みを作ることもできます。 その際は、SendGridと組み合わせてAPI経由でメール送信する方法が便利です。
この部分については、別記事で詳しく紹介します👇
▶ [GASとSendGridで自動返信メールを送る方法(近日公開)]
まとめ
- Googleフォームの項目IDは
form.getItems()
で取得できる - フォームIDはURLから取得可能(
openById()
を使う) - メールアドレスは
getRespondentEmail()
で取得(項目ではない) - 項目IDで処理を分けると、順番変更に強くなる
回答フォームの内容を利用してGASと連携する際の第一歩として、ぜひ覚えておきましょう!
コメント