質問: Javascript、ExcelVBAはある程度開発経験がありますが Google Apps ScriptやGoogleドキュメントの類は初めて触っています。 タイトルの通りですが、カテゴリマスタのデータを入れたスプレッドシートから フォームの選択肢を取得したいのですが、可能でしょうか。 (カテゴリが600以上あることと、追加時のことを考慮し手入力を避けたい) GASとGoogleフォームでいくら調べてもなかなか引っかからないので もしかしたら出来ないのかもしれないと諦めかけているところです。
回答: すいません、teratailに馴れなていのでコメントで返してしまいました。下記に対する返答です。 > > 1既存の質問事項のIDを取得→選択肢をクリア・再設定という内容にして起動をトリガーに実行する様にしたい > > > ``` function getCategory() { var mspid = "xxxxxxxxxxxxxxxxxx"; //スプレッドシートのID var ss = SpreadsheetApp.openById(mspid); var sheets = ss.getSheets(); var mst = sheets[0]; var dt = mst.getSheetValues(1, 1, row数, column数); var frmid = "xxxxxxxxxxxxxxxxxx"; //フォームのID var frm = FormApp.openById(frmid); var list = frm.getItems( FormApp.ItemType.LIST ); var qui = list[0].asListItem(); // リストが複数あるなら「[0]」を適宜変更 var choices = [] for (var i = 0; i < dt.length; i++){ choices.push(qui.createChoice(dt[i][0])); } qui.setChoices(choices); } ``` 以下コメント再掲: > > 取得は、 > > var qui = frm.addListItem().setTitle('カテゴリ選択'); > > ↓ > > var list = frm.getItems( FormApp.ItemType.LIST ); > > var qui = list[0].asListItem(); // リストが複数あるなら「[0]」を適宜変更 > > これでいけませんかね。 > > > setChoices が上書きで起こる場合は qui.setChoices(choices); のままで問題ないし、追記のみの場合は qui.getChoices() でリストを取得して入っていないものを追加、とか。 > > 仕様に項目の削除がなかったから、多分上書きだと思うのですが。 > > > また、トリガーはフォーム起動でなく、スプレッドシートの更新(リスト項目の追加)かタイマーでまわしたほうが良い気がします。 > > > 以上です。