カレンダーイベントをCSVでエクスポート

カレンダーイベントをCSVでエクスポート

記事
IT・テクノロジー
こんにちは、GASおじです。中小企業の経営者やフリーランスの皆さん、Googleカレンダーのイベントデータを手軽にCSVで書き出したいと思ったことはありませんか?経費管理や顧客との打ち合わせ記録など、データを活用したい場面は結構多いはずです。

今回は、Google Apps Script(以下GAS)を使って、既存のデータを一切消さずに、カレンダーイベントを日時付きの新しいシートまたはファイルにエクスポートする方法をご紹介します。しかも、入力検証やバッチ書き込み、バックアップ・ロールバックも考慮した堅実な作りで、SaaSの追加課金なし、Googleアカウントの利用枠内で安心して使えますよ。


■ 初期設定と必要な権限

まずはGoogleカレンダーとGoogleスプレッドシートの両方にアクセスできる権限が必要です。GASのスクリプトエディタで以下のスコープが自動的に付与されます。

・カレンダー読み取り権限(Googleカレンダーの予定編集権限.readonly)
・スプレッドシート編集権限(Googleスプレッドシートの編集権限)
スクリプトを初めて実行する際にこれらの権限承認を求められますので、許可してください。

また、個人情報保護の観点から、カレンダーイベントの内容はスクリプトが保存されているGoogleドライブ内に留まります。外部に送信するコード例はありませんが、取り扱いには十分注意をお願いします。


■ なぜ既存データは消さずに新しいファイルやシートに書くのか?

GASでデータを書き換える際に、clearやdeleteRowsなどの削除系APIを使う手もありますが、これは既存の重要データを誤って消してしまうリスクがあります。おじさんはSaaS課金に厳しいですが、データ損失はもっと厳禁です。

そこで今回は「新規作成した日時付きのスプレッドシート」へ書き出す設計にしました。これにより元データは安全に保管され、万が一問題があってもロールバックがしやすくなります。


■ イベントデータをCSV形式でエクスポートするGASコード例

以下のコードは、指定した期間のカレンダーイベントを取得し、新規に作成したスプレッドシートにCSV形式で書き出します。入力検証(期間の妥当性チェック)、バッチ書き込みで効率化し、バックアップ代わりの新規ファイル作成を行っています。

function exportCalendarEventsToCSV() {
// 期間設定(例:過去1ヶ月分)
const now = new Date();
const oneMonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate());

// 入力検証:期間が未来になっていないかチェック
if (oneMonthAgo > now) {
throw new Error('開始日が終了日より後になっています。期間設定を確認してください。');
}

const calendar = CalendarApp.getDefaultCalendar();
const events = calendar.getEvents(oneMonthAgo, now);

if (events.length === 0) {
Logger.log('指定期間にイベントがありません。');
return;
}

// 書き出し用の新スプレッドシートを作成(日時付き名前)
const timestamp = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const ss = SpreadsheetApp.create(`CalendarEventsExport_${timestamp}`);
const sheet = ss.getActiveSheet();

// ヘッダー行設定
const headers = ['タイトル', '開始日時', '終了日時', '場所', '説明'];
sheet.appendRow(headers);

// バッチ書き込み用配列作成
const rows = events.map(event => [
event.getTitle(),
Utilities.formatDate(event.getStartTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
Utilities.formatDate(event.getEndTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
event.getLocation() || '',
event.getDescription() || ''
]);

// まとめて書き込み(appendRowは非効率なのでsetValuesを利用)
sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);

Logger.log(`エクスポート完了。スプレッドシートURL: ${ss.getUrl()}`);
}

このコードをGASエディタにコピーして、実行してください。開始日と終了日は必要に応じて変更可能です。結果は新しいGoogleスプレッドシートに書き込まれ、元のカレンダーや既存シートは一切変更されません。


■ installable triggerで自動化も可能

このスクリプトは手動実行のほか、installable trigger(時間主導型トリガーなど)に設定すれば定期的なバックアップやレポート作成に活用できます。

トリガー設定手順は以下の通りです。

・GASエディタのメニューから「編集」→「現在のプロジェクトのトリガー」を開く
・「トリガーを追加」をクリック
・関数名にexportCalendarEventsToCSVを選択
・イベントの種類を「時間主導型」、実行頻度を希望の間隔(例えば毎日午前9時)に設定
・保存して完了
この方法で自動的にCSVエクスポートが行われ、経営データの活用が捗ります。


■ コスト削減の考え方(仮定)

追加の専用SaaSを使わず、Googleアカウントの利用枠内(Apps Scriptのquota・実行時間上限あり)で済むため、毎月のツール利用料がゼロに。

仮に月額5,000円のカレンダー連携ツールを使っていた場合、

・年間コスト = 5,000円 × 12ヶ月 = 60,000円
・GAS自動化による代替 = 0円(追加SaaS料金なし)
この差額分が浮く計算になります。ただし、GASの実行上限や管理工数はあるので、使い勝手に応じて検討してくださいね。


□ 復元手順について

エクスポートしたCSVデータはGoogleスプレッドシートに保存されるので、ファイルのバージョン履歴やGoogleドライブのゴミ箱から復元可能です。誤って削除しても30日以内なら復元できるため安心です。

もし誤ってスクリプトを実行して不要なファイルが増えてしまった場合は、手動で不要ファイルを整理してください。自動削除機能は今回のコードには含めていません。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す