はじめに
紙で配られる予定表をGoogleカレンダーに入力する場合に、ウェブのインターフェースで1件ずつ予定を追加していくのはかなり手間です。そこで、スプレッドシートに記入して、csvファイルに保存して、Googleカレンダーにインポートするのが楽ではないかと思い、やりはじめましたが、Googleのヘルプだけではわからないことがいくつかあり、それらを試して確認したので、2024年02月時点の情報を以下にまとめておきます。
試して確認したことなので、以下に記載のことには、常に成り立つわけではないことを記載している可能性があることに留意ください。
Googleカレンダーはcsvファイルとicsファイルをインポートできますが、スプレッドシートに記入したスケジュール情報を簡単にicsファイルに出力する方法は見つからず、プログラムを組む等の必要があり手間なので、csvファイルを作成してGoogleカレンダーにインポートすることにしました。
まとめ
以下に、調べた結果をまとめます。csvファイルのインポート方法はGoogleのヘルプを参照ください。
Excelのテンプレートファイルについて
- Excelのテンプレートファイルを「Googleカレンダーテンプレート.xlsm」に示します。ローカルフォルダにダウンロードして使用してします。マクロで、Excelファイル保存時にUTF-8で「CalDat_yyyy-mmdd-hhmm.csv」にエクスポートされるようにしています。保存するcsvファイル名を変更したいときは、保存ダイアローグが開いた時にファイル名を変更します。
- “setting”シートの「ファイル名選択」の設定を「0」にすると、Excelファイル保存時に、Excelファイル名.csvでエクスポートされます。エクセルファイルとcsvファイルのペアを保持しておく場合はこちらのファイル名が良いと思います。
- マクロの内容を確認する場合は、Excelファイルを開いた状態で、Alt+F11で、VBAエディターが開くので、当該ブックの”Microsoft Excel Objects>This Workbook”と”標準モジュール>Module1″を確認ください。
- マクロの初回実行時に実行許可を求められることがあります。また、マクロ実行のために、Excelファイルのプロパティの「全般>セキュリティ>許可する」にチェックマークを付ける必要があることがあります。
- マクロなしで手動操作でエクスポートするなら「Googleカレンダーテンプレート.xlsx」をダウンロードして使用してします。
- 「Googleカレンダーテンプレート.xlsx」をクリックするとGoogleスプレッドシートで開かれるので、Google スプレッドシートのメニュー操作でこれのコピーを作成(「ファイル」>「コピーを作成」で開くダイアローグで、ファイル名(拡張子なし)とGoogle Driveでの場所を決めて「コピーを作成」を押す)して、それに予定を記入し、「ファイル>ダウンロード>カンマ区切り形式 (.csv)」でcsvファイルにエクスポートして、下記に説明のUTF-8のBOMを付加するという方法もあります。アルファベット・数字・記号だけならBOMなしでもいけると思います。
- これらのファイルには以下に記載した内容をヘッダ項目のメモに記載しています。
- 必要なら列の入れ替え可です。
csvファイルのエンコード等について
- Googleスプレッドシートは、Googleカレンダーが使える環境では使えるので、できればこちらのテンプレートファイルを示したかったのですが、Google スプレッドシートのメニュー操作で、csvファイルへのエクスポートをBOM付きのUTF-8にする方法が見つからなかったのでExcelで示しました (BOMはByte Order Markのこと)。Googleスプレッドシートで「ダウンロード>カンマ区切り形式 (.csv)」でエクスポートすると、BOMなしUTF-8で保存されました。
- csvファイルに日本語(多バイト文字)を含む場合には、文字コードはBOM付きUTF-8にします。SJISだとカレンダーにインポートしたときに文字化けします。
- BOM付きUTF-8は、ファイル先頭に、「0xEF 0xBB 0xBF」が付加されています。
- BOMは、UnicodeではU+FEFFであらわされ、U+FEFFは、UTF-8なら「0xEF 0xBB 0xBF」、UTF-16なら「0xFEFF」、UTF-32なら「0x0000FEFF」になります。
- UTF-8のBOMは、つけないとインポート後に文字化けすることがありました。
- ExcelでUTF-8のcsvとして保存するには、「名前を付けて保存」で「ファイルの種類」として「CSV (コンマ区切り) (*.csv)」ではなく、「CSV UTF-8 (コンマ区切り) (*.csv)」を選びます。「CSV UTF-8 (コンマ区切り) (*.csv)」を選ぶとBOM付きUTF-8で保存されます。
- Googleスプレッドシートのメニュー操作でBOM付きUTF-8のcsvでエクスポートする方法は見つかりませんでした。GAS (Google Apps Script)でスクリプトを書くか、出力されたcsvファイルに別プログラムでBOMを付ける等の必要があります。
- WindowsでBOMを付けるひとつの方法は、メモ帳で開いて、「名前をつけて保存」で、「エンコード」に「UTF-8 (BOM 付き)」を選択することです。
- 改行コードはCR LF(\r\n), CR(\r), LF(\n)のどれでも可でした。どれでも可なのでよくわからない場合は無視でOKです。
csvファイルの内容について
- csvファイルの1行目はヘッダ行で以下のヘッダー項目があります。2行目以降に必要な行分のデータを記載します。太字は必須項目です。
Subject | Start Date | Start Time | End Date | End Time | All Day Event | Description | Location | Private |
- データ行の最終行には改行コードがあってもなくても可です。個人的には他のデータ行と同じであるべきなのでつけたいところです。最終行だけ改行コードがないと、データ行の入替処理でデータが乱れることがあります。
- 試した範囲ではヘッダー項目の順番(列の順番)は任意でOKでした。使いやすい順番に変更可です。また、必須ヘッダー項目以外の列は省略することができます。
- 各行で、データが記載されていない列は、その列がないのと同じです。なので、テンプレートファイルには全てのヘッダー項目を記載しておいて、必要のない列には値を入力しないという使い方が良いと思います。常に使用可能なヘッダ項目が表示されるので、普段使用していないヘッダ項目を使用するときにヘッダ項目名を確認する必要がありません。
- エディターでcsvファイルを作成する場合には、ある列からデータなしが最終列まで続く場合でも、ヘッダ項目に対応する’,'(コンマ)を記載しないと、読み込まれないデータ行が出てくることがありました。各行には、「ヘッダ項目数-1」の「””で囲まれていない’,’」が必要です (行末尾にも’,’を記載する場合は「ヘッダ項目数」の「””で囲まれていない’,’」) 。
- 以下に各ヘッダー項目の注意事項を記載します。以下の注意事項の要点は、Excelのテンプレートファイルの各ヘッダ項目に「メモ」として記載しました。
ヘッダ項目 | 注意事項 |
Subject | ・必須列 ・文字列中に’,’を含める場合には文字列を””で囲む (Excelのcsvエクスポートでは自動的に囲まれる) |
Start Date | ・必須列 ・yyyy/mm/ddで記載* ・mmは1桁の場合m or 0m (例: 3 or 03) ・ddは1桁の場合d or 0d (例: 3 or 03) ・”Start Date”だけを指定すると終日の予定になる |
Start Time | ・”End Date”と”End Time”の両方を指定しないと1時間の予定になる ・24時間制でhh:mmで記載するのが確実 ・12時間制で記載する場合は、hh:mm AM or hh:mm PMと記載する ・21:00 = 9:00 PM も指定可 ・9:00 = 21:00 AM も指定可(みたことないが) ・0:00 AM = 0:00 ・0:00 PM = 12:00 ・秒は指定できない ・hhが24以上の場合はyyyy/mm/ddからのhourになる 例:2024/1/31,25:00 = 2024/2/1,1:00 ・mmが60以上の場合はyyyy/mm/dd hhからのminuteになる 例:2024/1/31,25:61 = 2024/2/1,2:01 ・Excelで24:00以上を設定するには、セルフォーマットを”文字列”にする必要がある。 時刻フォーマットだと、24で割った余りの表示になる。 |
End Date | ・”End Date”だけを記載して、”End Time”を記載しない場合は前日までの予定として 登録・表示されるので注意 ・”End Time”不記載のため、”End Time”は0:00と内部的に解釈され、”End Date”の 0:00までの予定とみなされ、前日までの予定として登録されるのではないかと思われる。 ・“All Day Event”をTrueとしても、”End Date”だけを記載して、”End Time”を記載 しない場合は前日までの予定として登録・表示される ・”End Date”が”Start Date”よりも前の場合には無視される。”End Time”を指定しない ことになり1時間の予定になる。 |
End Time | ・”End Date”が空欄の場合は”Start Date”の日付が用いられる ・”End Time”が”Start Time”よりも前の場合には無視される。”End Time”を指定しない ことになり1時間の予定になる。 「日」・「週」表示の場合の予定の表示 ・”Start Date”,”Start Time”~”End Date”,”End Time”が23:59以下では、開始時刻から 終了時刻までの縦の帯が表示される。 ・”Start Date”,”Start Time”~”End Date”,”End Time”が24:00以上では、日付の直下 だけに横の帯が表示される。開始時刻は数値で記載されるが、終了時刻は表示されない。 終了時刻を見るには予定をクリックする必要がある。 「月」表示の場合の予定の表示 ・”Start Date”,”Start Time”~”End Date”,”End Time”が23:59以下では、開始日に 開始時刻だけが表示され、終了日・終了時刻は表示されない。 実際は2日にまたがる予定が、「月」表示で所要時間が23:59以下の予定は2日目のマスに 表示されないので注意。 2日目予定なしと間違える可能性がある。 「月」表示でも両方のマスに表示するには、1日目を~24:00 (or 23:59)の予定とし、 2日目を0:00~の予定として、2件の予定を記入する。 ・”Start Date”,”Start Time”~”End Date”,”End Time”が24:00以上では、予定の継続 する日に横の帯が表示され、開始時刻は数値で記載されるが、終了時刻は表示されない。 終了時刻を見るには予定をクリックする必要がある。 「スケジュール」表示の場合の予定の表示 ・”Start Date”,”Start Time”~”End Date”,”End Time”が23:59以下では、予定が2日間 にまたがっていても、どちらの日にも同じ開始時刻~終了時刻が表示されるので注意。 クリックすると開始・終了の日付・時刻が表示される。 ・“Start Date”,”Start Time”~”End Date”,”End Time”が24:00以上では、 開始時刻・終了時刻を設定していても、「終日」と表示されるので注意。 クリックすると開始・終了の日付・時刻が表示される。 |
All Day Event | ・True/False ・デフォルトはFalse ・Trueにすると、”Start Time”と”End Time”は空欄とみなされると思われ、時刻情報は 表示されない。 ・その結果、”End Date”だけを記載して、”End Time”を記載しない場合と同じことに なり、”End Date”の前の日までの設定になる。 ・”End Time”は0:00と内部的に解釈され、”End Date”の0:00までの予定とみなされ、 前日までの予定として登録されるのではないかと思われる。 ・Dateだけを設定し、Timeを設定しないと、「終日」にチェックがつくので、このとき には”All Day Event”のデータの設定によらず、”All Day Event”はTrueと見なされている と思われる。 ・「日」・「週」・「月」・「スケジュール」表示で予定は横の帯で表示される。 ・Trueは、”Start Time”または”End Time”に数値を入力した場合に無視するため に使うのではないかと思われる。このヘッダ項目はなくてもいいように思える。 ・このヘッダ項目の他の用途があれば知りたい。 |
Description | ・文字列中に’,’を含める場合には文字列を””で囲む (Excelのcsvエクスポートでは自動的に囲まれる) |
Location | ・文字列中に’,’を含める場合には文字列を””で囲む (Excelのcsvエクスポートでは自動的に囲まれる) |
Private | ・True/False ・デフォルトはFalse ・「データなし」または「False」では「デフォルトの公開設定」になる ・「True」では「非公開」になる ・インポートで「公開」に設定する方法はわからなかった。 「公開」にするにはインポート後に手動で修正する。 |
*: これ以外の並びでは、意図通りにインポートされない場合があることを以下で確認した。
確認したこと
以下は、上の内容をまとめるにあたり確認したことの一部です。興味のある人向けです。
日付のフォーマット
日本語版の「Googleカレンダーに予定を読み込む」の「.csv ファイルの作成と編集」には、”Start Date”の例として「例: 2020 年 5 月 30 日
」と書いてあるので”2020 年 5 月 30 日
“で試してみるとインポートできませんでした。
年・月・日の前後の半角スペースを入れたり取ったりしてもインポートできず、表形式で記載されている部分のフォーマットの”05/30/2020
“で試すとインポートできました。
すなわち、m/d/yyyy (m, dは2桁の場合も含む, 1桁のときは0m, 0dも可)です。
しかし、以下のcsvファイルをインポートすると、
Subject,Start Date
休001,24/1/28
休002,1/29/24
休003,2024/1/30
休004,1/31/2024
休004の行は、2024年1月31日ではなく、2026年7月1日にインポートされました。休004の行は月には31月はないので、m/d/yyyyでしか解釈できませんが、d/m/yyyyで解釈され、
1/31/2024=1日/31月(=2年7月)/2024年=1日/7月/2026(=2024+2)年となったようです。
年月日フォーマットはm/y/d, d/y/mという並びはないので、これを除いたy/m/d, y/d/m, m/d/y, d/m/yに対し、yは下2桁の場合と4桁の場合の2通りなので、計8通りのすべての場合をいくつか試してみて、試した範囲で意図通りに読み込めたのはyyyy/m/dのみでした。
2つのcsvファイルをインポートした結果を以下にまとめます。
番号 | Subject,Start Date | 意図した フォーマット | 結果 | インポート された日付 |
1 | 休001,24/1/28 | yy/m/d | d/m/yyと解釈された | 2028年1月24日 |
2 | 休002,1/29/24 | m/d/yy | d/m/yyと解釈された 1日29月2024年>1日(2年5月)2024年>1日5月2024年 のように意図しない月の変換がされるので不可 | 2026年5月1日 |
3 | 休003,2024/1/30 | yyyy/m/d | 意図通り | 2024年1月30日 |
4 | 休004,1/31/2024 | m/d/yyyy | d/m/yyyyと解釈された 1日31月2024年>1日(2年7月)2024年>1日7月2026年 のように意図しない月の変換がされるので不可 | 2026年7月1日 |
17 | 休017,24/26/1 | yy/d/m | yy/m/dと解釈された | 2026年2月1日 |
18 | 休018,2024/25/1 | yyyy/d/m | yyyy/m/dと解釈された | 2026年1月1日 |
19 | 休019,24/1/2024 | d/m/yyyy | 意図通り | 2024年1月24日 |
番号 | Subject,Start Date | 意図した フォーマット | 備考 | インポート された日付 |
5 | 休005,1/28/24 | m/d/yy | 意図通り 2番では1/29/24はd/m/yyで解釈された 解釈がぶれるので不可 | 2024年1月28日 |
6 | 休006,29/1/24 | d/m/yy | m/d/yyと解釈された | 2026年5月1日 |
7 | 休007,1/30/2024 | m/d/yyyy | 意図通り 4番では1/31/2024はd/m/yyyyと解釈された 解釈がぶれるので不可 | 2024年1月30日 |
8 | 休008,2024/1/31 | yyyy/m/d | 意図通り | 2024年1月31日 |
20 | 休020,11/1/2024 | d/m/yyyy | m/d/yyyyと解釈された dd/mm/yyyyとも解釈可能なので 間違いとは言い切れない | 2024年11月1日 |
21 | 休021,13/1/2024 | d/m/yyyy | m/d/yyyyと解釈された | 2025年1月1日 |
以下の表に結果をまとめます。意図通りに読み込んだ番号を青で、そうでない番号を赤で示します。
test1.csv | test2.csv | |
番号 | 番号 | |
yy/m/d | 1 | |
m/d/yy | 2 | 5 |
yyyy/m/d | 3 | 8 |
m/d/yyyy | 4 | 7 |
yy/d/m | 17 | |
d/m/yy | 6 | |
yyyy/d/m | 18 | |
d/m/yyyy | 19 | 21 |
上で試した結果からは試した範囲で常に意図通りにインポートされたのはyyyy/m/dだけでした。
Google カレンダー ヘルプの「.csv ファイルの作成と編集」の例に記載のm/d/yyyyは、上の例の4番で意図通りに読み込めませんでした。(通常はひとつのcsvファイルの中で日付のy, m, dの順番を変えることはないので、上の例は厳しすぎるかもしれません)
以上から日付けフォーマットにはyyyy/m/dを用いるのが良いと思われました。
以上
PR
コメント