GAS フォームでラジオボタンの項目が空の場合、回答がずれる

Google App Scriptを使用して、フォームの回答を取得したい場合、

let itemResponses = e.response.getItemResponses();

とすることが多いと思う。

これを使うと、問題や回答が配列として、itemResponsesに入るので、回答を取得する。

let answer = itemResponses[0].getResponse();

このようにして回答を取得していく。

1問目の回答は、インデックスが0にある。

例えば、問題が

記述式、ラジオボタン、記述式というように3問ある場合、

全て回答すれば、itemResponsesには[2]まで回答が入っている。

しかし、ラジオボタンにチェックがないときは、

itemResponsesには[1]までしか回答が入っていない。

これは、ラジオボタンにチェックをしない場合、空で回答が入るわけではなく、

何もないので、その下の回答が繰り上がってしまう。

グリッド式の問題や、複数選択のラジオボタンも同様である。

どうするか?

ラジオボタンなどは必須回答にする

こうすれば、この問題は回避できる。

もしくは、極力使わず、ラジオボタン系の問題は最後に持ってくる。

事前回答のURLからリンクを取得すれば、あらかじめラジオボタンの初期値を設定しておくことも可能なので、選択の面倒が減る。

GASで条件分岐

これは面倒だが、itemResponses.lengthで配列の長さを取ってきたり、

ラジオボタンの問題から処理を行ったりする。

例えば、上の3問の場合、

let answer3 = itemResponses[2].getResponse();
// 3問目の回答があれば、ラジオボタンはチェックされているということ。
if(answer3){
    // 3問目の回答の処理
    score += 30;
    // 2問目の回答の処理
    score += 20;
}else{
    // 3問目の回答がないので、ラジオボタンのチェックはない
    score += 30;
}

というようにする。

ラジオボタンが増えると面倒。

formItemsを使って回答を取得

よく調べてないので、今度追記する。

参照

https://www.wantedly.com/users/14890/post_articles/277456