2022/02/28に更新

【GASで時短】カレンダーの予定をスプレッドシートに出力する

カレンダースプレッドシート

Google カレンダーの予定を、スプレッドシートにまとめて出力するGoogle Apps Scriptです。カレンダーIDはダイアログボックスで入力できます。

こんな悩みを解決します


  • 最近の稼働状況をスプレッドシートにまとめることになった。カレンダーを見ながら手動で作るのは大変すぎる。

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


指定されたカレンダーの予定をスプレッドシートに出力します。
先月と今月の予定が対象になっています。

使い方


1.スクリプトの実行

上のメニューに有る「スクリプト実行」から「カレンダーの予定を出力する」を実行します。
現在選択されているセルを起点に、結果が書き込まれます。新しいシートで実行することをおすすめします。

2.カレンダーIDの入力

カレンダーID、またはメールアドレスを入力します。
自分の予定を出力する場合は、自分のGmailアドレスを入力してください。
他の人の予定を出力したい場合は、その人のカレンダーを自分のGoogleカレンダーに追加し、「設定」からカレンダーIDをコピーして入力してください。

3.結果の確認

先月と今月の予定がすべて出力されました。
デフォルトではセルの書式設定によって開始・終了日時の時刻が表示されないかもしれません。書式で調整してください。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00050/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('カレンダーの予定を出力する', 'export_calendar_schedule');

  // メニューを画面に追加する
  menu.addToUi();
}

function export_calendar_schedule() {

  // UIを取得
  const ui = SpreadsheetApp.getUi();

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // カレンダーIDを入力させる
  const response = ui.prompt('カレンダーID または メールアドレスを入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (response.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力された文字(カレンダーID)を取得する
  const calendar_id = response.getResponseText();

  // カレンダーを取得
  const calendar = CalendarApp.getCalendarById(calendar_id);

  // 取得期間を定義する。先月と今月の2ヶ月分とする
  const date = new Date(); //今日の日付を取得
  const date_end = new Date(date.getFullYear(), date.getMonth() + 1, 0); //今月の月末を取得

  date.setMonth(date.getMonth() - 1); //前月に移動する
  const date_start = new Date(date.getFullYear(), date.getMonth(), 1); //前月の月初を取得

  // 期間内のカレンダーイベントを取得する
  const events = calendar.getEvents(date_start, date_end);

  // 結果格納用の配列
  let result = [];

  // ループで1件ずつ値を取得
  for (let i = 0; i < events.length; i++) {

    let title = events[i].getTitle(); //予定のタイトル
    let begin = events[i].getStartTime(); //予定の開始日時
    let end = events[i].getEndTime(); //予定の終了日時
    let description = events[i].getDescription(); //予定の説明
    let location = events[i].getLocation(); //場所

    // 結果用の配列にまとめて追加する
    result.push([title,begin,end,description,location]);

  }

  // 項目名を配列の先頭に追加する
  result.unshift(['予定のタイトル','開始','終了','説明','場所']);

  // 選択されている(アクティブな)セルを取得する
  const active_cell = sheet.getActiveCell();

  // アクティブセルを起点に、書き込み範囲を取得
  const range = sheet.getRange(active_cell.getRow(), active_cell.getColumn(), result.length, result[0].length);

  // シートに予定を書き込む
  range.setValues(result);

}

関連するアプリ


【GASで時短】指定した月のカレンダーを生成する

年と月を指定すると、セルにカレンダーが出現するGoogle Apps Scriptです。カレンダーを入れたくなって調べてみたら標準機能にはなく、数式でやるにも結構面倒な感じだったので一発で作ってくれるGASを書いてみました。想像の3倍は面倒でした・・・。

【GASで時短】指定した年の12ヶ月分のカレンダーを生成する

指定した年の12ヶ月分のカレンダーを生成してくれるGoogle Apps Scriptです。前回作成した「指定した月のカレンダーを生成する」スクリプトをベースに、1年分出力するように変更してみました。横3 ✕ 縦4の形式で生成されます。

【GASで時短】様々な国の「国民の祝日」を取得する

Googleが用意してくれている祝日カレンダーをもとに、1年間の祝日をスプレッドシートに出力するGoogle Apps Scriptです。 祝日は年によって変わったりするので確認が面倒なのと、国外との取引がある時にその国の祝日がわかれば便利だなと思い作成しました。

【GASで時短】CSVファイルを直接シートに読み込む

インターネット上にあるCSVファイルをシートに直接取り込むGoogle Apps Scriptです。オープンデータ等の取り込みが楽になるかもしれません。

【GASで時短】カレンダーの予定を一括で作成する

スプレッドシートに入力した値を元に、カレンダーの予定をまとめて作成することができるGoogle Apps Scriptです。

【GASで時短】予定をすべて非公開にする

Googleカレンダーの予定を全て非公開にするGoogle Apps Scriptです。組織内で使っているとカレンダー自体は共有されていますので、隠したい予定は個別に非公開化する必要があります。誤って公開している予定が大量にある時にどうぞ。

【GASで便利に】本日の予定をまとめてSlackに通知する

Googleカレンダーの今日の予定をSlackに通知してくれるGoogle Apps Scriptです。1日分の予定は朝にまとめて知りたいですよね。SlackのIncoming Webhookを使用しています。

【GASで自動化】日付が古い行をまとめて消す

シートにあるN日以前の行を自動的に削除するGoogle Apps Scriptです。シートにログを出力していると肥大化しがちなので作りました。

【GASで時短】連続した日付(曜日、祝日付き)を生成する

アクティブセルを起点に、Nヶ月後までの日付を出力するGoogle Apps Scriptです。日本の祝日も表示してくれますので、予定表やガントチャートを作るときにどうぞ。

【GASでサボる】カレンダーの空き時間をすべて埋める

指定した日の空いている時間すべてに予定を入れてくれるGoogle Apps Scriptです。予定を入れられたくないときにいかがでしょうか?

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp