グーグルカレンダーの予定をスプレッドシートにガバっと出力した方法まとめ!【Google Apps Script】

web制作

読了の目安時間: 646

今回作ったスクリプト

やりたいこと

今回、グーグルカレンダーに登録している「カレンダー(1種類)」を選択して、そのカレンダーの中に登録しているスケジュール(イベント)について、スプレッドシートにすべてテキストとして書き出すという、Google Apps Script(以降、GAS)のスクリプトを作成しました。

Google app script calender 予定 出力

ソースコード

下記の通り。

出力結果

11月のうち、予定1というカレンダーに、「イベント名1」と「イベント名2」というスケジュールがあった場合、こんな感じに出力されます。

Google app script calender 予定 出力

自分が出力した要素はこちら。

A列⇒取得した予定の数(ID)
B列⇒取得したカレンダー名
C列⇒取得したカレンダー配下の予定
D列⇒取得した予定の開始時刻
E列⇒取得した予定の終了時刻
F列⇒D列からE列を差分した稼働時間
G列⇒取得した予定に書いてあるメモ内容

C列にはフィルター埋めてて、テキスト出力した後、並べ替えて確認できるようにしています。自分は特定の予定について、一ヵ月でどれだけ稼働していたのかを一覧にしたかったので、こういった形式で作成しました。(1行目部分は、スプレッドシート側で作成しています。自分の使いやすいようにカスタマイズしてもらえればと思います。)

ソースの使い方解説

まずはgasスクリプトをスプレッドシートに記述しましょう。スプレッドシートを作成してメニューバーの「ツール>スクリプトエディタ」を開きます。

Google app script calender 予定 出力

スクリプトエディタが開くので、function内に先ほどのソースコードをコピペします。

Google app script calender 予定 出力

コピペした後は、ちょっとだけ設定をイジります。

まず、10行目 var myCalの文字列部分(サンプルでは'取得したいカレンダーID'の部分)に、自分が取得したいカレンダーIDを入力します。

カレンダーIDは、googleカレンダーの設定画面から調べることができます。

Google app script calender 予定 出力

カレンダーIDを入力した後は、12行目のvar dateの文字列部分(サンプルでは'2017/12/01 00:00:00'の部分)で、取得したい月を入力します。今月から2018年になるので、西暦の修正もお忘れなく。

これでOKです。あとは、スクリプト画面の再生マークを押すと、スクリプトが起動して、指定した月における指定したカレンダーIDの予定をすべてスプレッドシートに書き出してくれます。

ちなみに出力する日時フォーマットを変更したい場合は、6行目のvar FORMAT_TIMEをいじりましょう。

スクリプト動作時の確認動作
GASスクリプトを起動すると、「このスクリプト、本当に動かして良いのかい??」という確認で、再度ログインなどを促されますので、問題なければYesを選択します。(このスクリプトはGoogleに認定されておらず危険な可能性があります、の部分は、左下の詳細などを押していくと、「このスクリプトを構わず動かす」といったリンクテキストが出てくるので、それをクリックすればOK。)

ただ、本当に害意あるプログラムをOKしてしまうと危険なので、インターネットから拾ったソースはきちんと中身を確認してから使うようにしましょう。(本記事のソースコードも害意はないはずですが、そういう書き手側の発言を安易に信じず、自分の目でしっかりご確認お願いします。)

その他・補足

出力する予定を2種類にできる?

可能です。ただ、一つのオブジェクトに複数の予定を入力できないようなので、下記のようにやります

・10行目のmyCalを増やす。
⇒myCal2などにして、もう一つのカレンダーIDを埋める。

・17行目のvar schedulesを増やす。
⇒schedules2などにして、先ほどのmyCal2を埋める。

・for分をもう一個追加する
⇒for分ガバッとコピペして、schedulesをschedules2にしつつ、21行目のID用のvar rangeを調整してください。(1回目のループ内容を引き継ぐようにする。)

もしかしたら、一つのオブジェクトに複数のカレンダーを配列みたいにして扱えるのかもしれないのですが、自分は必要なかったので、そこまで調べず・・・。もし調べた人いれば、報告して頂けるか、記事にしてもらえると、すごく助かります!

スクリプトは純正のスプレッドシートで操作しないと時間のエラーが起きる可能性あり!

本記事のGASコードは、G-Drive上で作成したスプレッドシートだけで使うようにしてください。ローカルのエクセルを用いて変換したスプレッドシートだと、タイムスタンプでエラーが起きる場合があります。

自分の場合、

「ローカルのエクセルファイルをG-Driveにアップロード⇒G-driveでスプレッドシートに変換⇒本記事のGASコードを埋め込み⇒動作」

というようにしたら、取得した予定の開始時間と終了時間が、すべて16時間ずつズレるエラーに遭遇しました。スプレッドシートのなんかしらの設定を修正すれば治るのだとは思いますが、いちいち面倒なので、GASコードはローカル⇔G-Driveの間で変換処理をしていないファイルを利用するようにしましょう。(純正スプレッドシートが好ましい。)

参考リンク

今回、作成にあたり、参考にしたサイト様のソースをたくさん流用させて頂きましたので、GASについてさらに詳しく知りたい方は、下記URLをご参照ください。

※参考リンク

▼Google Apps ScriptでGoogleカレンダーの記録をスプレッドシートに出力する
https://tonari-it.com/gas-calendar-spreadsheet/
⇒こちらのサイト様はGASについて、とても詳しく書かれています。参考・・・というか、ほとんどソース流用させて頂きました。(申し訳ございません・・・そして素晴らしい記事、本当にありがとうございます・・・!)

▼googleカレンダーから予定を取得する
https://qiita.com/n_sekiya/items/903114a3f7c808702c8e
⇒先ほどの記事の「each appendrow」の方法で出力すると、セル挿入の処理が入る分、全体の処理動作が遅くなる+セルの表示形式を固定にしておけない問題があったので、こちらの記事さまの「セルに値を書いていく部分のソース」を流用させて頂きました。

▼GoogleAppsScriptで日付をフォーマットする
https://qiita.com/yasuyuki_tsuda/items/11e882076e2dc9fdee16
⇒日付の改良で参考にさせて頂きました。

公式リファレンスは素晴らしい!

GASで困ったことがあった際は、Googleさんの公式リファレンスページを見て調べれば、だいたいなんとかなります。全文英語ですが、右クリック⇒日本語に翻訳をすると、かなり綺麗な日本語にしてくれますので、とても読みやすいです。

有料サービスのGcal2Excelもあります!

海外サービスになりますが、グーグルカレンダーの予定をエクセル出力する「gcal2excel」という、webサービスもあります。

https://www.gcal2excel.com/

サイト閲覧の際は、右クリック、日本語に翻訳とすると、英語もあまり気になりません。試用30日間と、無料プランもあるので、試してみては。

参考記事

▼Googleカレンダーのデータをエクセルに変換する「Gcal2Excel」が便利すぎる
https://orezinal.com/150033

まとめ

いかがでしたでしょうか。

グーグルカレンダーに記載している予定をcsvでガバっと出力したいという方は、ぜひ参考にしてみてください。

最後に一言

カレンダーがたくさんになっている人ほど効果あり。

本記事を気に入って頂けたら、facebookの「いいね!」を是非!

グーグルカレンダーの予定をスプレッドシートにガバっと出力した方法まとめ!【Google Apps Script】


本記事のシェアはこちらから!

  • このエントリーをはてなブックマークに追加
  • Pocket

PROFILE

yoshi

follow us in feedly

本ブログ・WebMakeBlog KIYOTATSUを運営しているYoshiと申します。普段はWEB制作をやっています。主に要件定義や構築が得意で、HTML/css/javascript/PHP/git/wordpress/MT/DB/photoshop/illustrator/fireworksなど扱えます。サーバー・アプリなども習得中。