前置き
・とにかくForms回答で送られてくるデータをGASで捕まえたい!という方のための内容です。
・「GoogleFormsとSpreadSheet」で調べると諸先輩方の丁寧な解説が沢山出てきますので割愛し、その先をご説明します。
・変数と定型句を見分けやすいよう「わざとらしく」書きました
・作業環境は以下の通り※GoogleのUIは2023年5月末時点
コンテナバインドの分岐点
見た目がそっくりな2つの作業場所が存在します
・フォームのApps Script
・スプシのApps Script <-正解
こちらでコーディング&トリガー設定
フォームの回答なのに...
テスト難しい...
普段は頼もしい2つのボタンが役に立ちませんでした。。。
毎回フォーム回答を送信しないとテストできない
どれ使う?
function myFunction(KOTAE) {
//二次元配列なら
const KAITOU_twoD = KOTAE.values
//回答のみで設問は手に入らない
//連想配列なら
const KAITOU_dict = KOTAE.namedValues
//設問:回答のセットで手に入る
//namedvaluesはダメ <-Vは大文字!
//なぜかオートコンプが効きません
//テスト
browser.msgbox()
console.log() //<-コレ推奨です
logger.log()
}
要素の順番制御が難しい(後述)ため、設問とセットになっていない二次元配列は集計・処理ミスにつながりかねない
Forms回答の怪
一方、連想配列(KAITOU_dict)の中身を見てみると
{'タイムスタンプ': [ '2023/06/01 22:31:27' ],
'質問1': [ 'オプション 1' ]}
キー:[値]が更に配列の入れ子状態なので扱いにくい...
//連想配列を二次元配列に変換
let KAITOU_twoD = [];
for (var KOBETU in KAITOU_dict) {
KAITOU_twoD.push([KOBETU, KAITOU_dict[key][0]]);
}
//設問&回答セットの二次元配列を入手
不思議のダンジョンかよ
現場の要望に応えて設問を増やしてみました
//連想配列(namedValues)の結果
{ '質問1': [ 'オプション 1' ],
'タイムスタンプ': [ '2023/06/01 22:31:27' ],
'質問3': [ 'オプション 1' ],
'質問2': [ 'オプション 1' ] }
(どの設問をコピーして作ったかによって順番が変動)
=増設の手間とコーディングの手間はトレードオフ関係
やりたい内容によって最適な対処方法は分岐しそうです
以上、初投稿の拙い文章で大変恐縮ですが最後までお読みいただきありがとうございました!