Javascript、ExcelVBAはある程度開発経験がありますが
Google Apps ScriptやGoogleドキュメントの類は初めて触っています。
タイトルの通りですが、カテゴリマスタのデータを入れたスプレッドシートから
フォームの選択肢を取得したいのですが、可能でしょうか。
(カテゴリが600以上あることと、追加時のことを考慮し手入力を避けたい)
GASとGoogleフォームでいくら調べてもなかなか引っかからないので
もしかしたら出来ないのかもしれないと諦めかけているところです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
すいません、teratailに馴れなていのでコメントで返してしまいました。下記に対する返答です。
①既存の質問事項のIDを取得→選択肢をクリア・再設定という内容にして起動をトリガーに実行する様にしたい
GAS
1function getCategory() { 2 var mspid = "xxxxxxxxxxxxxxxxxx"; //スプレッドシートのID 3 var ss = SpreadsheetApp.openById(mspid); 4 var sheets = ss.getSheets(); 5 var mst = sheets[0]; 6 7 var dt = mst.getSheetValues(1, 1, row数, column数); 8 9 var frmid = "xxxxxxxxxxxxxxxxxx"; //フォームのID 10 var frm = FormApp.openById(frmid); 11 var list = frm.getItems( FormApp.ItemType.LIST ); 12 var qui = list[0].asListItem(); // リストが複数あるなら「[0]」を適宜変更 13 14 var choices = [] 15 for (var i = 0; i < dt.length; i++){ 16 choices.push(qui.createChoice(dt[i][0])); 17 } 18 qui.setChoices(choices); 19}
以下コメント再掲:
取得は、
var qui = frm.addListItem().setTitle('カテゴリ選択');
↓
var list = frm.getItems( FormApp.ItemType.LIST );
var qui = list[0].asListItem(); // リストが複数あるなら「[0]」を適宜変更
これでいけませんかね。setChoices が上書きで起こる場合は qui.setChoices(choices); のままで問題ないし、追記のみの場合は qui.getChoices() でリストを取得して入っていないものを追加、とか。
仕様に項目の削除がなかったから、多分上書きだと思うのですが。また、トリガーはフォーム起動でなく、スプレッドシートの更新(リスト項目の追加)かタイマーでまわしたほうが良い気がします。
以上です。
投稿2016/03/30 05:21
総合スコア69364
0
すみません、半分ほど自己解決しました。
https://developers.google.com/apps-script/reference/forms/choice
1function getCategory() { 2 var mspid = "xxxxxxxxxxxxxxxxxx"; //スプレッドシートのID 3 var ss = SpreadsheetApp.openById(mspid); 4 var sheets = ss.getSheets(); 5 var mst = sheets[0]; 6 7 var dt = mst.getSheetValues(1, 1, row数, column数); 8 9 var frmid = "xxxxxxxxxxxxxxxxxx"; //フォームのID 10 var frm = FormApp.openById(frmid); 11 var qui = frm.addListItem() 12 .setTitle('カテゴリ選択'); 13 14 var choices = [] 15 for (var i = 0; i < dt.length; i++){ 16 choices.push(qui.createChoice(dt[i][0])); 17 } 18 qui.setChoices(choices); 19}
ただ、この内容だと新しい質問事項の追加なので
①既存の質問事項のIDを取得→選択肢をクリア・再設定という内容にして起動をトリガーに実行する様にしたい
②選択肢の表示と実際に送信される値を別にしたい
という課題が残っています。
②に関してはこの質問の本筋から離れていくと思うので別途解決法を探しますが、①については引き続きこちらで追わせてください。
投稿2016/03/30 02:26
編集2016/03/30 02:35総合スコア19
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 04:37
0
GoogleフォームではなくGASでフォームを作ればできると思います。HTMLを書いてURLを発行する感じです。HTMLテンプレート部分にもGASが使用できるので、スプレッドシートから項目呼び出しなども可能です。
【【短いコードで色々出来る】Google Apps Scriptでスプレッドシートと連携した無料Ajaxフォームの作り方※サンプル付き【自動返信メールもあるよ】 - Qiita】
http://qiita.com/snowsunny/items/56a85c63598dcfb1b06e
投稿2016/03/29 09:29
総合スコア69364
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 01:51
2016/03/30 02:04
2016/03/30 02:32
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 07:05