2022/06/09に更新

【GASで便利に】フォームの内容を元にカレンダーを登録する

フォームカレンダー

フォームに入力された値から、カレンダーのイベントを作成するGoogle Apps Scritpです。Googleアカウントを持っていない人に予定を入れてほしい時に使えるかも?

こんな悩みを解決します


  • Googleカレンダーの操作が不慣れな人に予定を入れてもらいたい
  • Googleアカウントを持っていない人に予定を入れてほしい
  • 不特定多数に予定を入れてもらいたいが、カレンダーやメールアドレスはあまり公開したくない・・・

用意するもの


GoogleフォームとGoogleカレンダーを使用します。スクリプトはフォームのコンテナバインド型として登録します。

このスクリプトで出来ること


  • フォームが送信されると、その内容を元にカレンダーのイベントを生成することができます。

使い方


1.事前準備

まずはフォームを作ります。
カレンダーイベントを作成するために、通常使用する項目を用意しました。
設問の名称(日付、タイトルなど)を元に、必要な値を拾っています。設問名を変えた場合はコードの修正もお願いします。

  • 日付
  • 開始時刻
  • 終了時刻
  • タイトル
  • 詳細
  • 場所

イベントを追加するカレンダーを指定します。
特定の個人のカレンダーならGmailのアドレスでOKです。共有カレンダーの場合はGoogleカレンダーの設定からカレンダーIDを確認してください。
なお、そのカレンダーに対して変更権限がないと書き込めませんのでご注意ください。

2.トリガーの設定

フォームの送信時に動作してほしいので、トリガーをセットします。

  • 実行する関数: onSubmit
  • 実行するデプロイ: HEAD
  • イベントのソース: フォームから
  • イベントの種類: フォーム送信時

3.動作の確認

適当な値を入れて動作確認してみましょう。

フォームを送信してちょっと待つと、カレンダーにイベントが現れました!

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00100/index.html
 */

function onSubmit(e) {

  // ######### 事前設定ここから ########

  // 予定を反映させるカレンダーのID(通常はメールアドレス)をセットしてください
  const calendar_id = '**************************';

  // ######### 事前設定ここまで ########
  

  // 「FormApp.getActiveForm を呼び出す権限がありません」というエラーが出たので明示的にFormAppを呼び出す。
  FormApp.getActiveForm();

  // フォームの項目や回答を取得する
  const form_responses = e.response.getItemResponses();

  // 回答を格納する変数を宣言
  let event_date, event_start, event_end, event_title, event_desc, event_location;

  // フォームの項目数だけループする
  for (var i = 0; i < form_responses.length; i++) {

    // フォームの質問を取得
    let question = form_responses[i].getItem().getTitle();

    // 質問に対する回答を取得する
    let answer = form_responses[i].getResponse();

    // 項目名から、それぞれの値を該当の変数に格納していく
    if (question == '日付') {
      event_date = answer;
    } else if (question == '開始時刻') {
      event_start = answer;
    } else if (question == '終了時刻') {
      event_end = answer;
    } else if (question == 'タイトル') {
      event_title = answer;
    } else if (question == '詳細') {
      event_desc = answer;
    } else if (question == '場所') {
      event_location = answer;
    }

  }

  // 日付と日時を連結して、Dateオブジェクトを作成する
  event_start = new Date(event_date + ' ' + event_start);
  event_end = new Date(event_date + ' ' + event_end);

  // 説明と場所はoptionでセットする
  let options = {
    description: event_desc,
    location: event_location
  }

  // カレンダーを取得
  const calendar = CalendarApp.getCalendarById(calendar_id);

  // 予定を作成する
  calendar.createEvent(event_title, event_start, event_end, options);

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp