GoogleカレンダーのCSVインポートを自動化する|手作業をなくす手順

google カレンダー csv インポート 自動化 で検索してたどり着く人は、たいてい同じ場所で止まっています。CSVを作ってインポートする手順そのものは分かった。けれど毎月・毎週それを繰り返すのが面倒で、どこまでを機械に任せられるのかが分からない。この記事では、Googleカレンダー側の仕様として何が決まっているのか、どの工程が本当に自動にできるのか、そして自動化に向かない場合の見分け方を、公開されている資料に沿って整理します。

結論から書くと、自動化できる工程は3つに分かれていて、多くの人が自動化したいと思っているのは1つ目ではなく2つ目です。そこを取り違えると、作業時間はほとんど減りません。

「自動化」と呼んでいる工程は3つに分かれている

予定の一括登録は、順番に並んだ3つの工程でできています。

  • 工程1: 予定の一覧をスプレッドシートやシステムから取り出し、Googleカレンダーが読める形のファイルにする
  • 工程2: そのファイルをGoogleカレンダーの画面から取り込む
  • 工程3: これを毎月・毎週、人が忘れても回るようにする

検索して出てくる記事のほとんどは工程1の書き方を説明しています。ところが実際に時間を食っているのは、月に1回しかないはずの工程2をそのたびに思い出す手間と、工程3が存在しないために誰かが覚えておかなければならない状態です。

ここで押さえておきたいのは、工程2にはGoogle側の制約があって、無人化できないということです。Googleカレンダーのヘルプは、予定の読み込みについて操作の対象をパソコンに限っています。スマートフォンとタブレットの案内は「予定を書き出すには、パソコンでGoogleカレンダーを開いてください」と、パソコンでの操作へ案内するだけの内容です。つまり工程2は、画面を開いて人がクリックする作業として残ります。

自動化したい対象が工程2なら、答えは「その画面を使うのをやめる」になります。工程1と工程3だけなら、CSVのまま進められます。

CSVで取り込むときにGoogle側が決めていること

まず、CSVインポートそのものの位置づけを確認します。Googleカレンダーは、書き出したICSファイルとCSVファイルをパソコンから読み込めます。手順は、Googleカレンダーを開き、右上の設定から「インポート / エクスポート」を選び、パソコンからファイルを選んで、追加先のカレンダーを指定して「インポート」を押す、という流れです。既定では、予定はメインのカレンダーに入ります。

この工程で落ちる情報があります。ヘルプは2点を明記しています。予定を読み込んでも、予定のゲストと会議のデータは読み込まれません。会議の招待者リストとビデオ会議のリンクは、CSVからは復元されないということです。社内会議の一覧を移そうとしている場合、これは無視できない差になります。

もう1つは、繰り返しの扱いです。ヘルプは、CSVファイルから定期的な予定を読み込むと、カレンダー上で定期的な予定にはならず、1回限りの予定が連続して並ぶ形になることがあると書いています。毎週の定例をCSVで52行書いて取り込むと、後からまとめて時間をずらすことができません。繰り返す予定はCSVではなくICSで書くか、カレンダー側で繰り返しとして作るほうが、後の修正がききます。

ZIPファイルを渡された場合も注意が必要です。ZIPの中にはカレンダーごとにICSファイルが入っているため、いったん取り出して1つずつ読み込みます。ZIPをそのまま渡す運用は組めません。

列の名前は英語、必須はSubjectとStart Dateだけ

CSVの中身の決まりは、思っているより緩いです。ヘルプの説明では、1行目にヘッダーを置き、そのヘッダーは英語で書く必要があります。そして、必須なのは最初の2つだけです。

使えるヘッダーは次のとおりです。

  • Subject(必須)予定の名前
  • Start Date(必須)開始日
  • Start Time 開始時刻
  • End Date 終了日
  • End Time 終了時刻
  • All Day Event 終日かどうか。True または False
  • Description 説明やメモ
  • Location 場所
  • Private 限定公開かどうか。True または False

日本語の画面を使っていても、列の名前は「件名」ではなく Subject です。ここを日本語にしたまま取り込もうとして失敗する例が多く、ヘルプも重要事項として英語表記を求めています。

もう1つの落ちやすい点が、カンマの扱いです。説明や場所にカンマを含めるときは、その文字列を引用符で囲みます。区切り文字と中身の文字が同じなので、囲まないと列がずれます。

Subject,Start Date,Start Time,End Date,End Time,Description,Location
期末試験,05/30/2020,10:00 AM,05/30/2020,1:00 PM,"多肢選択式問題 50 問と小論文 2 問","Columbia, Schermerhorn 614"

スプレッドシートで作る場合は、この形をそのままシートに書いて、CSV形式で保存します。列を増やす必要はありません。使わないヘッダーは省略できます。

日付の書き方でつまずく人が多い

自動化の話に入る前に、ここを片付けておく必要があります。CSVインポートの失敗で最も多いのが日付の形式です。

厄介なのは、日本語版のヘルプの書き方です。ヘッダーの説明では Start Date の例が「2020 年 5 月 30 日」と日本語の表記で書かれている一方、同じページの見本の表では 05/30/2020 と書かれています。前者をそのまま真似ると取り込めません。同じ点で止まった記録が公開されています。

日本語版の「Googleカレンダーに予定を読み込む」の「.csv ファイルの作成と編集」には、”Start Date”の例として「例: 2020 年 5 月 30 日」と書いてあるので”2020 年 5 月 30 日“で試してみるとインポートできませんでした。 出典: jiyuukaitakusha.com

対策は単純で、見本の表と同じ月/日/年の形にそろえることです。スプレッドシートで日付として扱われている列は、書き出すときに表示形式のまま出るため、セルの表示形式を先に合わせておきます。時刻も同様で、見本は 10:00 AM のように午前午後の表記です。

ここがそろっていないと、後段をいくら自動化しても毎回同じところで止まります。自動化の設計に入る前に、手で1行だけ取り込んで通ることを確かめておくと、後が早くなります。

取り込む前に決めておく3つのこと

繰り返し回す前提なら、最初に決めておく項目があります。

1つ目は、どのカレンダーに入れるかです。既定はメインのカレンダーですが、一括登録した予定は後から一括で消すのが難しいため、専用のカレンダーを作ってそこへ入れる運用のほうが後始末がききます。カレンダーごと非表示にしたり、削除したりできるからです。

2つ目は、重複したときの扱いです。Googleカレンダーのインポートは、同じ内容を2回取り込めば2件になります。同じファイルを間違って2回読み込んだときに気づける仕組みが必要です。実務では、取り込み済みのファイル名と日付を記録に残しておく、専用カレンダーに入れて件数を確認する、といった手当てをします。

3つ目はタイムゾーンです。CSVには時刻の欄はありますが、タイムゾーンを書く欄がありません。取り込み先のカレンダーの設定が使われるため、海外の予定を混ぜるときはICSで書くほうが安全です。ICSは各予定を BEGIN:VEVENT と END:VEVENT ではさむ形式で、ファイル全体を BEGIN:VCALENDAR と END:VCALENDAR で囲み、先頭に VERSION:2.0 などのヘッダー情報を置きます。この形式の仕様は公開されています。

この3つは、自動化したあとで直すと過去分の作り直しが必要になります。先に決めるだけで済む話です。

本当に無人で回すなら、インポート画面から離れる

工程2が人の操作として残る以上、月に1回でも確実に回したいなら、CSVを作って画面から取り込む方式そのものを外す必要があります。その置き換えがGoogle Apps Scriptです。スプレッドシートの行を読んで、Googleカレンダーへ直接予定を作ります。

Apps Script の CalendarApp では、getDefaultCalendar で既定のカレンダー、getCalendarById で特定のカレンダーを取り、createEvent で開始と終了を指定した予定、createAllDayEvent で終日の予定、createEventSeries で繰り返しの予定を作れます。自由形式の文から予定を作る createEventFromDescription もあります。CSVで苦労した繰り返しの表現は、こちら側だと素直に書けます。

無人で回す部分は、インストール可能なトリガーのうち時間主導型のものを使います。毎日決まった時刻にスクリプトを走らせる形です。トリガーは作成者のアカウントとして動くため、担当者が変わるときは作り直しが必要になります。

上限も公開されています。カレンダーの予定の作成は1日5,000件、Google Workspace のアカウントでは1日10,000件です。トリガーの合計実行時間は無料のアカウントで1日90分、Workspace では1日6時間、1回の実行時間の上限は6分です。数百件の登録なら余裕がありますが、短時間に呼び出しを詰めると「Service invoked too many times in a short time: Calendar」というエラーが出ます。この場合は呼び出しの間に1秒待つ処理を入れる、という対処が公式に案内されています。

自動化したほうがよい場合と、CSVで十分な場合

ここまでの前提を踏まえると、判断の基準は頻度と件数の2つに絞れます。

年に1回、学校行事の予定を100件入れるだけなら、CSVを手で作って取り込むほうが速いです。スクリプトを書いて、権限を通して、トリガーを設定する時間のほうが長くかかります。日付の形式だけ合わせておけば、作業は数分で終わります。

毎月、シフト表や出張予定が更新されるなら、逆になります。CSVの方式は毎回の手作業が残り、繰り返しの予定が1回限りの連続になるという制約も毎回ついてきます。スクリプトなら、シートを更新した時点で反映されます。

判断が難しいのは、間にある「四半期に1回」あたりです。このときは件数ではなく、担当者が1人かどうかで決めるとよいです。その人しか手順を知らない状態が続くなら、手順書つきのCSVのほうが引き継げます。

入口を変えると、CSVを作る手間そのものが消える場合がある

ここまでは、予定の一覧がすでにデータとして存在している前提で書いてきました。ところが実務では、その一覧を作るところから手作業になっていることが少なくありません。メールで送られてきた日程表、PDFの年間予定、紙で配られたシフト表。これをスプレッドシートに打ち直してCSVにしているなら、自動化の対象はインポートではなく入力です。

Mac用のカレンダーアプリの中には、書類や画面に写っている日程をまとめて取り込む機能を持つものがあります。どの範囲の予定をどう読み取るかは製品ごとに違うので、できることの一覧で対応する形式を確かめてから選ぶことになります。予定の入れ方そのものを見直したい場合は、予定の入れ方にある入力方法の違いが参考になります。こうしたアプリでは話し言葉と音声で予定を入れられるため、1件ずつの登録もCSVを経由しません。

移動時間まで含めて予定を組みたい場合は、登録の方式とは別の観点が必要です。会議と会議の間に移動が入るかどうかは、移動時間の考え方を見ると判断しやすくなります。カレンダーアプリごとの違いを横に並べて比べたいときは他のカレンダーとの比較が使えますし、動作環境や料金の細かい条件はよくある質問にまとまっています。

整理すると、自動化の検討はこの順番になります。予定の一覧がすでにデータであるなら、Apps Script で工程2ごと置き換える。一覧を作るところが手作業なら、そこを先に変える。年に数回で担当者が交代するなら、CSVの手順書を残す。この3つのうちどれに当たるかを決めてから道具を選ぶと、作ったあとで使われなくなる自動化を避けられます。

よくある質問

CSVインポートはスマートフォンからできますか?

できません。Googleカレンダーのヘルプは、予定の読み込みをパソコンでの操作として案内しており、iPhoneとiPadの案内もパソコンでGoogleカレンダーを開くよう促す内容です。外出先でどうしても取り込む必要があるなら、CSVを使う方式ではなく、スクリプトで直接登録する方式に切り替えるほうが確実です。

CSVの列名は日本語では書けないのですか?

書けません。ヘルプは、ファイルを読み込むためにヘッダーを英語で表記する必要があると明記しています。必須は Subject と Start Date の2つで、残りの Start Time、End Date、End Time、All Day Event、Description、Location、Private は省略できます。日本語の画面を使っていても、列名だけは英語のままにします。

毎週の定例をCSVで登録すると何が困りますか?

繰り返しの予定として認識されず、1回限りの予定が並ぶ形になることがあります。ヘルプにもその旨が書かれています。この状態だと、時間を30分ずらすような変更を後からまとめて行えず、1件ずつ直すことになります。繰り返す予定は、ICSで書くか、カレンダー上で繰り返しとして作るほうが後の修正がききます。

Apps Scriptで自動登録するとき、件数の上限はどれくらいですか?

公開されている割り当てでは、カレンダーの予定の作成は1日5,000件、Google Workspace のアカウントでは1日10,000件です。あわせて、1回の実行は6分まで、トリガーの合計実行時間は1日90分、Workspace では1日6時間という上限があります。数百件の登録なら余裕がありますが、短時間に呼び出しを詰めるとエラーになるため、間に待ち時間を入れます。

記事一覧へ戻る