前提・実現したいこと
スプレッドシートのリストを、Googleフォームのプルダウンリストと連動
フォームの回答時にスプレッドシートの内容から、プルダウンリストも更新される
発生している問題・エラーメッセージ
エラーメッセージ Exception: 質問に重複した選択肢の値を追加することはできません。
該当のソースコード
function overwriteCastList() { /** // スプレッドシートの情報を取得する // **/ var SS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('◯◯◯'); // スプレッドシートのH2のセルを指定 if("△△△" == SS.getRange("H2").getValue()){ // H行の3行目からコンテンツをもつ最後の行までの値を配列で取得する var colA = SS.getRange(3, 8, SS.getLastRow() - 1).getValues(); } /** // Googleフォームのプルダウン内の値を上書きする // **/ // GoogleフォームのIDを設定 →「https://docs.google.com/forms/d/〇〇〇/edit」の〇〇〇を↓に記述 var form = FormApp.openById('□□□□□□□□□□□□□□□□□□□'); // 質問項目がプルダウンのもののみ取得 var items = form.getItems(FormApp.ItemType.LIST); items.forEach(function(item){ // 質問項目が「△△△」を含むものに対して、スプレッドシートの内容を反映する if(item.getTitle().match(/△△△*$/)){ var listItemQuestion = item.asListItem(); var choices = []; colA.forEach(function(name){ if(name != ""){ choices.push(listItemQuestion.createChoice(name)); } }); // プルダウンの選択肢を上書きする listItemQuestion.setChoices(choices); } }); }
試したこと
https://qiita.com/kobaboy/items/610263087d9c85d8458e
以前こちらのサイトを参考に作成して、成功しています。
https://teratail.com/questions/290657
こちらのQ&Aも参考にしました。
スプレッドキー、フォームキーなど確認しましたが、解決できませんでした。
解決にご協力いただきたいです。
エラーの通り、一つのリストボックスに、重複した値(=同じ値)を設定しようとしている可能性があります。
colA.forEach(function(name)
の直後に
console.log(name)
を入れて実行したときのログ出力を確認してみてはいかがでしょうか。
ご回答頂き有難うございます。
確認したところ、空白部分が抽出されており、Latrowの調整で、重複はなくしたのですが、それでもなお同じエラーが続いている状態です。
フォームの質問内容をまるごと上書きするような形式にしたいのですが、関数として不備などがあるのでしょうか?
何かご存知でしたらご教授いただけると幸いです。
同じコードで手元でフォームとシートを作って実行してみたところ
特にエラーなく正常に質問内容が更新されています。
そちらのデータ固有の問題の可能性があるのですが、フォームとスプレッドシートのリンクを共有していただくことは可能でしょうか?
ご検証いただきありがとうございます。
シートの公開をすることはできず、シートの中身を検証したところ重複部分を見つけました。
無事解決することが出来ました。有難うございました。
回答1件
あなたの回答
tips
プレビュー