アカウント課金なしで使える1日5円の多機能メールフォームがリリース 簡単につくれて売り上げアップ

google script スプレッドシートからのフォーム作成~2

GAS 公式サンプルコードの理解Google Apps Script
この記事は約6分で読めます。

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()の他に以下があります。

  1. onEdit(e) : スプレッドシートの値を変更したときに実行する。
  2. onInstall(e) : アドオンをインストールすると実行する。
  3. doGet(e) : GAS で作成し公開したWebアプリ(URL)にアクセスするか、外部のプログラムがHTTP GET要求を上記Webアプリ(URL)に送信すると実行する。
  4. 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: パラメータnamefunctionNameパラメータを持つ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)メニューを削除する。

次のサンプルコード解説

ブロック3

タイトルとURLをコピーしました