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)メニューを削除する。

