見出し画像

#77 フォームからのカレンダー登録

先日行われた、Google カレンダーを題材にした以下のオンラインセミナー。

無料のオンラインセミナーでしたが、180名の定員が満席になる状況だったため、GEG Utsunomiya で「Eureka!27「毎日を便利に!Googleカレンダー活用術」」として再演されるほどでした。

Google カレンダーをどう使う?

わたし自身は、両方とも参加しましたし、業務の予定などを Google カレンダーに登録しています。
これまでにも、Google スプレッドシートの内容を一括して Google カレンダーに書き出すプログラムを作り、毎月の予定はこのプログラムで登録しています。

上記のオンラインセミナーに参加して、用途別のカレンダーを作成して、公開・共有することで、予定が必要としている人にダイレクトに伝わると思いました。
ホームページに予定を掲載していても必要としている人には伝わりますが、プル型なので必要としている人がホームページを見に来てくれなければなりません。また、予定に変更が生じた場合に、その変更を伝えることが難しいのです。

しかし、Google カレンダーを利用すれば、必要な情報をプッシュ型として提供でき、予定に変更が生じた場合にも、その内容を伝えることが可能です。
Google for Education 活用ライブラリにも、

といった学校行事を Google カレンダーで共有する方法が紹介されています。
共有するカレンダーに予定を登録するには、前述のプログラムで一月ずつ登録したり、↓ の動画で紹介されているように 1年分まとめて登録したり、といった方法を使いましょう。

今回のプログラム

今回作成したプログラムは、Google フォームから入力された予定を、Google カレンダーに登録します。

  • 開始時間や終了時間が指定されているもの、時間の指定されていないもの、複数日にまたがって実施されるものなど、様々な形態の予定に対応。

  • 「タイトル」「説明」「主催者」「開催場所」などの情報を、予定の詳細情報に書き込む。

  • 管理者が確認してからカレンダーに登録するモードを備える。

既に予定が決まっている場合は、上述のようなプログラムで登録しておけばいいのでしょうが、後から追加する予定を受け付けるためなどに利用できると思います。

実際に作成した Google スプレッドシートは、以下の URL にアクセスすることで、自身の Google ドライブにコピーを作成できます。

https://docs.google.com/spreadsheets/d/1-XpaaQkkDj1GLZn_7_V07iipnaMovV3TzRhe0lu84EE/copy

配布している Google スプレッドシートは、下図のようにシート「説明」と、GAS のプログラムが埋め込まれたものとなっています。

配布している Google スプレッドシート

このスプレッドシートに、Google フォームからの回答を保存するように設定してください。

作成する Google フォーム

配布しているプログラムは、そのままの状態では下図のようなフォームからの回答を処理するようになっています。

フォームの例 ①
フォームの例 ②

プログラム中で使用するのは、以下の項目です。

  • タイムスタンプ ※※※

  • メールアドレス ※※※

  • 主催(Host)

  • お名前(Your Name) ※※※

  • イベントタイトル(Event Title) ※※※

  • 開催日(Start Date) ※※※

  • 開始時刻(Start Time)

  • 終了日(End Date)

  • 終了時刻(End Time)

  • 概要(Description) ※※※

  • イベント詳細リンク

※※※」の付してある項目は、必ず存在していなければなりませんが、その他の項目は Google フォームの質問として存在していなくても構いません。

  • 作成したフォームでは、必要な質問が何番目に存在しているかを、プログラム冒頭の定数で指定しなければなりません。質問のタイトルや説明には、どのような内容でも構いませんし、何番目に存在していても構いません。

  • 必ず存在していなければならない質問ではない項目は、存在していなくても構いません。例えば、「主催(Host)」の項目を使用しない場合には、11行目の EVENT_HOST を -1 に設定します。その他の項目についても必須項目以外は、フォームに質問に含まれていなくても構いません。

  • 上述のサンプルと異なる順序や質問の変更がある場合には、それぞれの項目について、順番か -1 を設定します。

  • プログラムでは、適切な値が入力されていることを厳密にチェックしていないので、フォームでは「日付」や「時刻」などを使って、入力させるようにしてください。

プログラムの冒頭に定義されている対応する定数 ①

プログラムの使い方

前述のように Google フォームを作成したら、プログラムとしては、順序が逆になりますが…
3行目の TARGET_CALENDAR で、登録対象となるカレンダーを指定しています。配布しているファイルでは ''(空欄)となっていますが、この状態だと、GAS のプログラムの権限確認を行った Google アカウントのデフォルトカレンダーに登録されます。

プログラムの冒頭に定義されている対応する定数 ②

4行目の APPROVAL_MODE は、登録時に承認を必要とするか?の設定です。true か false で設定し、それぞれ以下のように動作します。

  • true:管理者の承認操作後に登録

  • false:管理者の承認操作が必要なく登録

ここまでの設定が完了したら、スクリプトエディタの上部で onOpen 関数を選択して「実行」ボタンを押してください。

onOpen を選択して実行

スクリプトの初回実行時には、実行するアカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。

更に、画面左側の「トリガー」をクリックして、

画面左側の「トリガー」をクリック

更に、画面右下の「+ トリガーを追加」をクリックします。表示された画面で、下図のようにトリガー関数を設定します。設定する内容としては、以下の 2項目に注意してください。

  • 「実行する関数を選択」で「onFormSubmit

  • 「イベントの種類を選択」で「フォーム送信時

トリガー関数を設定

トリガー関数を設定しようとしたときにも、前述の確認作業が必要になるかもしれませんが、同様に許可してください。

管理者の承認操作

前述のプログラム 4行目の APPROVAL_MODE が false に設定されていた場合、フォームから予定が送信されても、カレンダーに即座に登録されません。
管理者に登録申請があった旨がメールで通知されるので、内容を確認して登録作業を行わなければなりません。

登録操作は、登録する行のいずれかの行を選択した状態で、メニューから「カレンダー登録」→「登録実行」を選択します。

「カレンダー登録」→「登録実行」を選択

登録されると、プログラムの 21行目に定義されている EVENT_ID で定義された列に、登録した予定の ID が記録されます。

  • 配布しているファイルでは、EVENT_ID に 12 が定義されているため、列 L に ID が記録されます。

  • 登録が完了したことを表すために、ID を記録していますが、この ID を用いて更新作業ができる訳ではありません。

イベントの ID が記録される列を指定

メールでの通知

このプログラムでは、フォームで登録した人、管理者のそれぞれに、次のタイミングでメールを送信します。

  • フォームで登録した人

    • 予定の登録申請が受け付けられた

    • 予定がカレンダーに登録された

  • 管理者

    • 予定の登録申請が受け付けられた

    • 予定がカレンダーに登録された(CC:

最後に

今回のプログラムは、画像ファイルを Google ドキュメントへ変換することで、画像中の文字をテキストデータとして抽出する、OCR 機能を実現しています。画像ファイルを目視確認して、一つずつチェックするよりも格段スムーズに処理できるようになるのではないか、と思います。
スクリーンショットから文字が抽出できるテクニックは、別のケースでも利用できると思います!

最後に、お決まりのフレーズなどを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • コメントを含めても 190行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍

この記事が気に入ったらサポートをしてみませんか?