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

講習会参加申し込み自動化GASサンプル(概要)

講習会受付自動化スクリプトサンプルGASサンプル
この記事は約9分で読めます。

講習会参加申し込みスクリプト

毎年開催される講習会参加申し込みをGoogle Apps Script (GAS) を学びながら自動化するスクリプトを完成させる初心者向けのシリーズです。

このページでは、目的とするスクリプトの概要と初回作業の解説を行います。

GAS作成目的と手順の概要

例年、ボランティアメンバーがFAXで受付し 既定の用紙に手作業で集計していた講習会の参加申し込みをオンラインで受付しスプレッドシートに出力して集計できるようにGoogle Apps Script (GAS)で自動化して、メンバーの負担を軽減することを目的としています。

従来手作業で行っていた受付と集計作業には多くの条件があり出力形式も多岐に渡り複雑なため自動化スクリプトは、初心者でも理解しやすいように複数回に分けてシリーズ化し機能を追加しながら作成していきます。

初回作業概要

初回は、 googleドライブに講習会スケジュールが入ったgoogle scriptスプレッドシート(講習会予定2020)をあらかじめ作成しておき、このスプレッドシートの内容に基づき、カレンダーにイベントを作成し、入力フォームからの情報をスプレッドシートに書き込んでいきます。

スクリプトの動き
  1. スプレッドシート内の講習会スケジュール内容をもとにgoogle カレンダーにイベントを作成します。
  2. スプレッドシートにリンクする参加申し込み入力フォームを作成する。

Google Apps Script (GAS) は、下記のgoogle script スプレッドシートからのフォーム作成を基本にして作成しています。

初回作業の入出力要件

入力

毎年の申し込みは、学校単位または、個人(社会人参加者)で行われます。
実際の申し込みには、項目や項目相互に申し込み条件がありますが、今回は基本的な項目に基づく基本機能のみ作成します。

学校名:
メールアドレス:
参加講習会:レベル1、レベル2、レベル3
住所:
受講者氏名:
生年月日:
性別:
参加申し込み確認:

初回作業の出力要件

参加申し込み内容をスプレッドシート内の 新規 回答シートに加える。

初回作業で使用するスプレッドシート

講習会2020スプレッドシートクリックしコピーを作成して使用してください。

初回作業サンプルスクリプト

上記で作成した講習会2020スプレッドシートのスクリプトエディターに下記スクリプトをコピーして使用します。

/**
* 講習会2020フォーム作成メニューの追加
*/
function onOpen() { 
var menu = [{name: '講習会フォーム', functionName: 'reception_'}];
SpreadsheetApp.getActive().addMenu('作成', menu); 
} 
/*講習会スクリプトがまだ作られていない場合、スプレッドシートの内容に基づき講習会申し込み入力フォームを作成。
/*入力フォームが作成済の場合はメッセージを表示する。*/
function reception_() { 
if (ScriptProperties.getProperty('講習会2020カレンダー')) { 
Browser.msgBox('講習会フォルダー内に講習会2020フォーム作成済!'); 
} 
var ss = SpreadsheetApp.getActive(); 
var sheet = ss.getSheetByName('スケジュール'); 
var range = sheet.getDataRange(); 
var values = range.getValues(); 
Logger.log(range); 
Logger.log(values); 
setUpCalendar_(values, range); 
setUpForm_(ss, values); 
ScriptApp.newTrigger('onFormSubmit').forSpreadsheet(ss).onFormSubmit().create();
ss.removeMenu('作成'); 
} 
/**
 *Googleカレンダーに講習会予定を書き込みます。
 *講習会のイベントごとにイベントID(Gmailアドレス)を取得しスプレッドシートに書き込みます。
 *@param {Array } valuesスプレッドシート範囲のセル値。
 *@param {Range}範囲会議データを含むスプレッドシートの範囲。
 */
 function setUpCalendar_(values, range) {
 var cal = CalendarApp.createCalendar('講習会2019カレンダー');
 for (var i = 1; i < values.length; i++) {
 var session = values[i];
 var title = session[0];
 var level = session[1];
 var start = joinDateAndTime_(session[2], session[3]);
 var end = joinDateAndTime_(session[2], session[4]);
 var options = {location: session[5], sendInvites: false};
 var event = cal.createEvent(title, start, end, options)
     .setGuestsCanSeeGuests(false);
 session[6] = event.getId();
 }
 range.setValues(values);
 // Store the ID for the Calendar, which is needed to retrieve events by ID.
 ScriptProperties.setProperty('講習会2020カレンダー', cal.getId());
 }
 /*スプレッドシートの日付と時間からDateオブジェクトを作成する。 
 *@param {Date} date A Date object from which to extract the date.
 *@param {Date} time A Date object from which to extract the time.
 *@return {Date} A Date object representing the combined date and time.*/ 
function joinDateAndTime_(date, time) { 
date = new Date(date);
date.setHours(time.getHours());
date.setMinutes(time.getMinutes());
return date; 
} 
/*スプレッドシートに追加する。
*@param {Spreadsheet} ss The spreadsheet that contains the conference data.
*@param {Array} values Cell values for the spreadsheet range.
*/
 function setUpForm_(ss, values) {
 // Group the sessions by date and time so that they can be passed to the form.
 var schedule = {};
 for (var i = 1; i < values.length; i++) {
 var session = values[i];
 var day = session[2].toLocaleDateString();
 var time = session[3].toLocaleTimeString();
 if (!schedule[day]) {
   schedule[day] = {};
 }
 if (!schedule[day][time]) {
   schedule[day][time] = [];
 }
 schedule[day][time].push(session[0]);
 Logger.log(session[0]); 
 Logger.log(schedule);
 }
 // 講習会2020参加申し込みフォームを作成する。
 var form = FormApp.create('講習会2020参加フォーム');
 //Formの回答先シートを設定する。
 form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
 form.setTitle('講義参申し込みフォーム');
 form.addTextItem().setTitle('学校名').setRequired(true);
 var validationEmail = FormApp.createTextValidation().requireTextIsEmail().build();
 form.addTextItem().setTitle('学校メールアドレス').setRequired(true).setValidation(validationEmail);
 var validationphone = FormApp.createTextValidation().requireNumber().build();
 form.addTextItem().setTitle('学校電話番号').setValidation(validationphone);
 form.addMultipleChoiceItem().setTitle('受講レベル参加講習会種別').setChoiceValues(['レベル1講義','レベル2講義','レベル3講義']).setRequired(true);
 form.addTextItem().setTitle('現住所').setRequired(true);
 form.addTextItem().setTitle('受講者氏名').setRequired(true);
 form.addMultipleChoiceItem().setTitle('性別').setChoiceValues(['男','女']).setRequired(true);
 form.addDateItem().setTitle('生年月日').setRequired(true);
 form.addMultipleChoiceItem().setTitle('現在のレベル').setChoiceValues(['レベル1','レベル2','レベル3']).setRequired(true);
 form.addDateItem().setTitle('現在のレベルの取得日時').setRequired(true);
 form.addMultipleChoiceItem().setTitle('申し込み').setChoiceValues(['参加','不参加']).setRequired(true);
}
function onFormSubmit(e) {return;}

スクリプトの実行とフォーム入力

  1. スクリプトエディターからonOpen関数を実行。
    • スケジュールシートに作成メニューが表示されます。
    • 作成メニューのサブメニュー(講習会フォーム)をクリックします。
  2. 新規に回答シートが作成されます。
  3. 回答シートのフォームメニューをクリックして実際のフォームを表示します。
  4. フォームから参加情報を入力し回答シートに入力データが蓄積されることを確認します。
  5. スケジュールシートの作成メニューが消えていることを確認します。
  6. カレンダーにイベントスケジュールが設定していることを確認します。
タイトルとURLをコピーしました