質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1606閲覧

1つのグーグルフォーム内にある2つのプルダウンリストに、同一スプレッドシート同一シート別カラムからアイテムリストを反映させたいです。

kddn

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/12/26 13:29

前提・実現したいこと

1つのグーグルフォーム内にある2つのプルダウンリストに、同一スプレッドシート同一シート別カラムからアイテムリストを反映させたいです。

1つのコンテナバインド型スクリプト内の2つのファイル(ほぼ同じ実行内容)を同時に動かしたいのですが、どうしても片方だけ動いてくれません。
エラーメッセージも出ませんが、プルダウンリストに反映されません。

試したこと

・my functionやpulldownNameListなどの実行スクリプト名にpulldownNameList2などで差別化
・1つのうまく行っているファイルを削除して、うまく行ってないファイルだけで実行

補足情報(FW/ツールのバージョンなど)

◻︎ うまくいってるファイル

function myFunction() {

}

function pulldownNameList() {

//スプレッドシートのID「https://docs.google.com/spreadsheets/d/◇◇◇/edit#gid=0」の◇◇◇を次の行の◇◇◇にコピーしてください
var sheets = SpreadsheetApp.openById('1bdTDijP2hLE9khpQPaaqqkfD39jOL3KvhQ9t9b6SGVY').getSheets();

var sheet = sheets[0];

if("キーマン追加" == sheet.getRange("D1").getValue()){

var colA = sheet.getRange(2, 4, sheet.getLastRow()).getValues();

}

// GoogleフォームのIDの「https://docs.google.com/forms/d/□□□/edit」の□□□を次の行の□□□にコピーしてください
var form = FormApp.openById('1g3LiG_DLBdR7L6MpwEtvZBeT6BmdSgUaVzV4ZBx5qnU');

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); }

});

}

◻︎ うまく反映されないファイル
function myFunction2() {

}

function pulldownNameList2() {

//スプレッドシートのID「https://docs.google.com/spreadsheets/d/◇◇◇/edit#gid=0」の◇◇◇を次の行の◇◇◇にコピーしてください
var sheets = SpreadsheetApp.openById('1bdTDijP2hLE9khpQPaaqqkfD39jOL3KvhQ9t9b6SGVY').getSheets();

var sheet = sheets[0];

if("氏名(新規時)" == sheet.getRange("H1").getValue()){

var colA = sheet.getRange(2, 8, sheet.getLastRow()-1).getValues();

}

// GoogleフォームのIDの「https://docs.google.com/forms/d/□□□/edit」の□□□を次の行の□□□にコピーしてください
var form = FormApp.openById('1g3LiG_DLBdR7L6MpwEtvZBeT6BmdSgUaVzV4ZBx5qnU');

var items = form.getItems(FormApp.ItemType.LIST);

items.forEach(function(item){

if(item.getTitle().match(/氏名(2回目以降).*$/)){ var listItemQuestion = item.asListItem(); var choices = []; colA.forEach(function(name){ if(name != ""){ choices.push(listItemQuestion.createChoice(name)); } }); listItemQuestion.setChoices(choices); }

});

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/26 14:08 編集

・期待通りにリストに反映されない原因として、それぞれのif文のところで"trueになっていると思い込んでいる"可能性がありますが、 その部分は問題なく動いているという理解でよろしいでしょうか。 具体的には、"うまく反映されないファイル"の、 if("氏名(新規時)" == sheet.getRange("H1").getValue()){ と if(item.getTitle().match(/氏名(2回目以降).*$/) それぞれの直下に console.log("OK")という1行を入れて実行した時に、 きちんと「OK」がログ表示されるか?という事です。 (リストにアイテムを追加しようとしているのに、その前段階のところである「OK」がログ表示されないのであれば、if文のところがおかしいということになります) ・「1つのコンテナバインド型スクリプト内の2つのファイル(ほぼ同じ実行内容)を同時に動かしたい」 の「同時に」という単語からの推測ですが、 上記のpulldownNameList 及び pulldownNameList2 関数のいずれか一方または両方に対して、なにかトリガーを設定しているのでしょうか? →仮にトリガーを設定しているのならば、どの関数に、どのようなトリガーを設定しているのでしょうか。 →仮にトリガーを設定していないのならば、「同時に実行したい」とは、具体的にどのような意味なのでしょうか。
kddn

2021/12/26 23:13

ご対応のほど有難うございます! 早速 if("氏名(新規時)" == sheet.getRange("H1").getValue()){ と if(item.getTitle().match(/氏名(2回目以降).*$/) それぞれの直下に console.log("OK") という1行を入れて実行してみました! わかったのは if(item.getTitle().match(/氏名(2回目以降).*$/) の直下に入れた時だけログが表示されない状況です。 items.forEach(function(item){ if(item.getTitle().match(/氏名(2回目以降).*$/)){ console.log("OK") var listItemQuestion = item.asListItem(); var choices = []; colA.forEach(function(name){ if(name != ""){ choices.push(listItemQuestion.createChoice(name)); } }); ということはif文がおかしいという認識でしょうか? 調べてみます! トリガーは現在どちらにも設定しておりません! 「同時に実行したい」は意味が伝わりにくい表現でした。すみません。 最終的には、Googleフォームで入力した際に両方の関数が動いて、対象スプレッドシートの該当のカラムにある最新の情報が、それぞれの関数で指定しているプルダウンリストに反映されるようにしたいという風に考えています。 <イメージ> 前提: 同じGformの質問項目に ①のプルダウン選択質問と、②のプルダウン選択質問がある A : ①のプルダウン選択質問の更新  Gformでの記述回答がスプレッドシートに反映  →関数が動く  →①のプルダウンの選択肢が更新 B : ②のプルダウン選択質問の更新  Gformでの別の記述回答がスプレッドシートに反映  →関数が動く  →②のプルダウンの選択肢が更新 A,Bの関数を両方とも待機させておきたい(それぞれが動いて欲しい)ということになります。
kddn

2021/12/26 23:17

なお、うまく行っている関数の方は両方しっかりOKと表示されました。 function myFunction() { } function pulldownNameList() { //スプレッドシートのID「https://docs.google.com/spreadsheets/d/◇◇◇/edit#gid=0」の◇◇◇を次の行の◇◇◇にコピーしてください var sheets = SpreadsheetApp.openById('1bdTDijP2hLE9khpQPaaqqkfD39jOL3KvhQ9t9b6SGVY').getSheets(); var sheet = sheets[0]; if("キーマン追加" == sheet.getRange("D1").getValue()){ console.log("OK") var colA = sheet.getRange(2, 4, sheet.getLastRow()-1).getValues(); } // GoogleフォームのIDの「https://docs.google.com/forms/d/□□□/edit」の□□□を次の行の□□□にコピーしてください var form = FormApp.openById('1g3LiG_DLBdR7L6MpwEtvZBeT6BmdSgUaVzV4ZBx5qnU'); var items = form.getItems(FormApp.ItemType.LIST); items.forEach(function(item){ if(item.getTitle().match(/キーマンの成果?.*$/)){ console.log("OK") var listItemQuestion = item.asListItem(); var choices = []; colA.forEach(function(name){ if(name != ""){ choices.push(listItemQuestion.createChoice(name)); } }); listItemQuestion.setChoices(choices); } }); }
kddn

2021/12/26 23:53

できました!!! 理由がわからないのですが if(item.getTitle().match(/氏名(2回目以降).*$/)){ において、()を指定しているのがダメかと思って if(item.getTitle().match(/氏名 2回目以降.*$/)){ このようにGformの方も変更してみたら動きました!!!! ヒントを与えていただいて有難うございます!!!! console.log("OK") でチェックしていくスキルを頂きました!
guest

回答1

0

ベストアンサー

・期待通りにリストに反映されない原因として、それぞれのif文のところで"trueになっていると思い込んでいる"可能性があります。

"うまく反映されないファイル"の、
if("氏名(新規時)" == sheet.getRange("H1").getValue()){

if(item.getTitle().match(/氏名(2回目以降).*$/)
それぞれの直下に
console.log("OK")という1行を入れて実行した時に、
きちんと「OK」がログ表示されるでしょうか?
(リストにアイテムを追加しようとしているのに、その前段階のところである「OK」がログ表示されないのであれば、if文のところがおかしいということになります)


なお、

<イメージ> 前提: 同じGformの質問項目に ①のプルダウン選択質問と、②のプルダウン選択質問がある A : ①のプルダウン選択質問の更新  Gformでの記述回答がスプレッドシートに反映  →関数が動く  →①のプルダウンの選択肢が更新 B : ②のプルダウン選択質問の更新  Gformでの別の記述回答がスプレッドシートに反映  →関数が動く  →②のプルダウンの選択肢が更新

(上記はコメントより引用)
このコメントが「回答者がGoogleフォームのプルダウンを選択した瞬間に①や②の関数を動かしたい」という意味ならば、
そのような動作をGoogleフォームで行うことはできません。

投稿2021/12/27 12:07

編集2021/12/27 12:08
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kddn

2021/12/28 23:26

有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問