2022/03/02に更新

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

カレンダー

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

こんな悩みを解決します


  • 間違ってGoogleカレンダーの予定を公開にしていた。まじでヤバい!いますぐ非公開にしたい!

用意するもの


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

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


指定したカレンダーの予定の公開設定を、すべて非公開にします。
過去3ヶ月分と、未来の3ヶ月分を対象にしています。

使い方


1.スクリプトの実行

スクリプトの実行前に、いま存在するカレンダーの予定を確認します。「非公開」と書かれていないのでこれが書き換え対象の予定です。

上のメニューに有る「スクリプト実行」から「過去3ヶ月、未来3ヶ月のカレンダーの予定を非公開にする」を実行します。

3.カレンダーIDの入力

カレンダーID、またはメールアドレスを入力します。
自分の予定が対象の場合は、自分のGmailアドレスを入力してください。
他人のカレンダーを対象にしたい場合は、その人のカレンダーを自分のGoogleカレンダーに追加し、「設定」からカレンダーIDをコピーして入力してください。
なお、そのカレンダーに対して「予定の変更」以上のアクセス権限が無いと非公開化はできません。

4.結果の確認

処理が完了すると、「予定の非公開化が完了しました。非公開に変更された予定をシートに出力しました。」という完了メッセージが表示されます。

シートを確認すると、非公開に書き換わった予定が出力されています。

カレンダーの予定を確認すると、「非公開」になっていますね。

5.エラーメッセージ

期間内のすべての予定がすでに「非公開」になっている場合は、「過去3ヶ月および未来の3ヶ月の予定はすべて非公開になっています」というメッセージを表示して、スクリプトが終了します。

スクリプト


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

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

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

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

  // メニューに追加するボタン
  menu.addItem('過去3ヶ月、未来3ヶ月のカレンダーの予定を非公開にする', 'change_calendar_schedule_visibility_private');

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

function change_calendar_schedule_visibility_private() {

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

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

  // 1行あたりの行数を入力させる
  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(); //今日の日付を取得
  date.setMonth(date.getMonth() + 3); //3ヶ月後に移動する
  const date_end = new Date(date.getFullYear(), date.getMonth(), 0); //1年後の月末を取得

  date.setMonth(date.getMonth() - 3); //3ヶ月前に移動する。すでに3ヶ月後になっているので6ヶ月巻き戻す
  const date_start = new Date(date.getFullYear(), date.getMonth(), 1); //1年前の月初を取得

  Logger.log(date_start);
  Logger.log(date_end);

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

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

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

    let visibility = events[i].getVisibility(); //公開設定を取得

    // 現在の公開設定がPRIVATE以外のものを対象とする
    if (visibility != CalendarApp.Visibility.PRIVATE) {

      // 予定を非表示にする
      events[i].setVisibility(CalendarApp.Visibility.PRIVATE);

      // 変更を加えた予定をスプレッドシートに出力するため、情報を取得
      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]);
    }

  }

  // 対象のスケジュールが1件もない場合はアラートはスクリプトを終了する。
  if(result.length == 0){
    ui.alert('過去3ヶ月および未来の3ヶ月の予定はすべて非公開になっています');
    return;
  }

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

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

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

  // 完了メッセージを表示する
  ui.alert('予定の非公開化が完了しました。非公開に変更された予定をシートに出力しました。');

}

関連するアプリ


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

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

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

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

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

タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp