GASによるgoogleフォームの作成
以下サンプルコードを読んでいきましょう。
スプレッドシートがロードされたときに スプレッドシートにメニューを挿入する サンプルコード
/** * A special function that inserts a custom menu when the spreadsheet opens. */ function onOpen() { var menu = [{name: 'Set up conference', functionName: 'setUpConference_'}]; SpreadsheetApp.getActive().addMenu('Conference', menu); }
onOpen()
シンプルトリガー といわれる予約関数の中のひとつで、ドキュメントを開くなどの特定のイベントが発生したときにGASにより自動的に実行されます。
シンプルトリガー には、onOpen()の他に以下があります。
- onEdit(e) : スプレッドシートの値を変更したときに実行する。
- onInstall(e) : アドオンをインストールすると実行する。
- doGet(e) : GAS で作成し公開したWebアプリ(URL)にアクセスするか、外部のプログラムがHTTP
GET
要求を上記Webアプリ(URL)に送信すると実行する。 - doPost(e) : HTTP
POST
要求を GASで作成し公開したWebアプリ(URL)に送信すると実行する。
SpreadsheetApp.getActive().addMenu
スプレッドシートを表すスプレッドシートオブジェクト内でアクティブなシートを取得し、シートにConferenceメニューとサブメニューSet up conferenceを追加しています。
Set up conferenceサブメニューをクリックするとsetUpConference_関数を呼び出します。
addMenuメソッド
Spreadsheetのメソッドのひとつ。
書式:addMenu(name, subMenus)
name:追加するメニュー名
subMenus: パラメータname
とfunctionName
パラメータを持つJavaScriptマップの配列
スプレッドシートの内容を元にフォームを生成するサンプルコード
このブロックでは、スプレッドシートの内容を元にgoogleカレンダーに会議予定を追加し、参加申し込みフォームを生成します。
/** * A set-up function that uses the conference data in the spreadsheet to create * Google Calendar events, a Google Form, and a trigger that allows the script * to react to form responses. */ function setUpConference_() { if (ScriptProperties.getProperty('calId')) { Browser.msgBox('Your conference is already set up. Look in Google Drive!'); } var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName('Conference Setup'); var range = sheet.getDataRange(); var values = range.getValues(); setUpCalendar_(values, range); setUpForm_(ss, values); ScriptApp.newTrigger('onFormSubmit').forSpreadsheet(ss).onFormSubmit() .create(); ss.removeMenu('Conference'); }
ScriptProperties.getProperty(キー)
ScriptProperties.getProperty()でスクリプトのプロパティを取得できます。
ScriptProperties.getProperty(‘calId’)で、スクリプトプロパティーの calId (カレンダーID)キーを取得し、 calId が設定されている場合は、ブラウザ上にメッセージを表示します。
getScriptProperties() メソッド
書式 プロパティー=ScriptProperties.getProperty(キー)
キーが設定されていない場合は、NULLが返ります。
サンプルコードでは、setUpCalendar_関数でgoogleカレンダーの設定が完了するとカレンダーIDが設定されます。
Browser.msgBox()
書式:msgBox(prompt) ブラウザ上にポップアップを表示する。
prompt: Popupに表示されるテキスト。
この方法は推奨されておらず。代わりには Ui.alert
を使用します。
会議スケジュールを取得し、カレンダー設定関数とフォーム作成関数を呼び出す
spreadsheet.getSheetByName(‘<シート名>’):スプレッドシートからシート名を指定して取得
sheet.getDataRange():シート内でデータが存在するディメンション(range)を返します。
range.getValues():戻り値(Object[][]
この範囲の長方形グリッドを返します。)
取得したシート内データーをパラメーターとして、
setUpCalendar_関数とフォーム作成関数を呼び出します。
setUpCalendar_(values, range); setUpForm_(ss, values);
フォーム送信ボタンでonFormSubmit関数が起動するように取得したシートのトリガーをセットします。
ScriptApp.newTrigger(‘onFormSubmit’).forSpreadsheet(ss).onFormSubmit().create()
応答がフォームに送信されたときに myFunction 関数を起動するトリガーを設定する場合
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); ScriptApp.newTrigger('myFunction') .forForm(form) .onFormSubmit() .create();
ss.removeMenu('Conference');
removeMenu(name):シートから指定(Conference)メニューを削除する。