【GAS】Googleフォームの回答をGoogleカレンダーに予定として追加する

GASを使ってこのサイトではいくつか記事を上げてきたかなあ、と思うんだけど今回は日付入力の入ったGoogleフォームの回答をGoogleカレンダーに予定として追加するっていうことをやっていきたい。

関連記事

何かGoogleフォームに回答されたものをそのままGoogleカレンダーに予定として追加したい!っていうものがあれば参考にしてみてください。ではやっていこう。

Googleフォームの回答をGoogleカレンダーの予定として入れる流れ

流れとしてはこんな感じ。

  1. Googleフォームで回答
  2. GASが起動しGoogleカレンダーに予定が入力される

Googleフォームで送信されたらGASを動かすっていうことができる。そのGASでGoogleカレンダーへ予定を入れるっていう感じ。

Googleフォームを用意する

まずはGoogleフォームを用意しよう。今回用意するフォームはこんな感じ。

何かのキャンペーンがあって、その開始日と終了日を入力できるフォーム。回答されたら開始日と終了日に合わせてGoogleカレンダーの予定が作られるイメージ

GoogleフォームとGASを連携する

GoogleフォームとGASの連携は簡単で、[スクリプトエディタ]をクリックすればOK。

そしたらGASを書くことのできる画面が表示される。

GASを書く

GASの画面が表示されたらコードを書いてやろう。フォームの回答を取得してカレンダーに予定を追加するコード。

// Googleフォームが送信されたら実行させる
function submit(e){
  // Googleフォームの回答を取得する
  var itemResponses = e.response.getItemResponses();
  // キャンペーン名
  var campaign_name = itemResponses[0].getResponse()
  // 開始日
  var start_date = itemResponses[1].getResponse()
  // 終了日
  var end_date = itemResponses[2].getResponse()

  // カレンダーに予定を追加する
  var CALID = "予定を追加したいGoogleカレンダーのID";
  var cal = CalendarApp.getCalendarById(CALID);
  cal.createEvent(campaign_name, new Date(start_date), new Date(end_date));
}

回答を取得してから、その回答をもとにGoogleカレンダーに予定を入れている。試しに開始日と終了日を12月1と7日にしてフォームを送信するとこんな感じの予定が作成される。

コードでやっていることは、フォームで送信されたそれぞれの回答をまずは取得。

その回答を元にcal.createEvent(campaign_name, new Date(start_date), new Date(end_date))でカレンダーに予定を作成している。ただコードを書くだけじゃダメでフォームが送信されたらっていうトリガーを設定する必要があるからその設定を見ていこう。

カレンダーのIDを取得する

その前にGoogleカレンダーのIDなんだけど、これはGoogleカレンダーの設定から見ることができる。[設定と共有]から下の方を見てみるとありますね。

これをコピーしてコードのvar CALID = "予定を追加したいGoogleカレンダーのID"にIDを貼り付けてやればOK。

トリガーを設定する

Googleフォームが送信されたら実行するっていうトリガーなんだけど、左側のトリガーをクリックしたら[トリガーを追加]を押そう。

でこんな感じにする。

イベントのソースは[フォームから]、イベントの種類は[フォーム送信時]。これでフォームが送信されたら指定した関数(上でいうとsubmit)が動くようになる。保存ボタンを押すといろいろ権限の確認なんかが出てくるけど、承認して進もう。

これでGoogleフォームから送信してみるとカレンダーに予定が作成されました。

 

コードを追加したらトリガーを作り直す必要があるかも

GASの中でカレンダーを使ったりスプレッドシートを使ったりするコードを書くと、それらにアクセスしていいのか?っていう権限が必要になってきます。

トリガーを設定した後にこういう権限が必要なコードを書いて実行した場合、うまく実行することができない。トリガーを削除してし再度作成すれば、権限の確認が出るからそこで承認すれば実行することができるようになる。

Googleフォームの回答をスプレッドシートにも記載する

Googleフォームからカレンダーに予定が追加されるのはいいけど、スプレッドシートにもその情報記載したいなあ・・・なんて思っちゃいますよね。やりましょう。Googleフォームで回答されたら、スプレッドシートにその回答を記録して、Googleカレンダーにも予定を追加する。

  1. Googleフォームが回答されたらスプレッドシートに回答を記録させる
  2. Googleフォームが回答されたらGASでGoogleカレンダーに予定を追加する

Googleフォームとスプレッドシートを連携する

Googleフォームとスプレッドシートは連携することができるから[回答]をクリックして、スプレッドシートのマークをクリックしよう。

既存のスプレッドシートでもいいけど、今回は新しいスプレッドシートを作成する。するとこんなスプレッドシートができますね、便利。

これで準備は完了。さっきと同じようにGoogleフォームから入力して送信してみよう。

こんな入力をして送信すると、スプレッドシートにはこんな入力がされる。

Googleカレンダーも見てみるとちゃんと予定が作成されていますね。

これでスプレッドシートからも内容を見ることができるし、カレンダーからも予定を確認することができるようになった。

まとめ

Googleフォームの回答を元にGoogleカレンダーに予定を作成したり、スプレッドシートに記載したりしてみたけどどうだろうか。作ってしまえば便利だけど、フォームの結果を確認したりしてコードを書いてくのはちょっと面倒だね。

ちなみにいろいろ確認する場合に自分はBetterlogっていうライブラリを使ってスプレッドシートに出力されたログを見つつやってたよ。この記事の中で紹介しましたね。

関連記事GASで使えるライブラリおすすめ6選!追加方法と使い方を紹介するよ!

GoogleのサービスならGASでいろいろ連携して使えるのが良い。普段Googleのサービスを使っている場合は使いこなせば業務が楽になるかもしれないね。

GASで作業自動化・効率化をしたかったら人にお願いするのもあり

GASを使ってGoogleカレンダーに書き込むっていうことを書いたけど、こういう自動化を行う時にいまいちどうすればできるんだ?となってしまう時もあると思います。そういう場合にはスキルを持っている人にやってもらうのも一つの手です。

スキルの売り買いをすることのできるサービスって今やいろいろありますからね。ココナラの作業自動化・効率化カテゴリを見てみると作業の自動化をしてくれる人たくさんいますよ。