GAS カレンダー入出力


スクリプトの概要
スプレッドシートの準備: スプレッドシートにカレンダーID、開始日、終了日を入力するためのセルを設定します。
GASのスクリプトを作成: スプレッドシートに紐づいたGASプロジェクトを開き、スクリプトを書きます。
カレンダー情報の取得と出力: 指定されたカレンダーから指定された期間のイベント情報を取得し、スプレッドシートに出力します。
スプレッドシートの設定
A1セル: "カレンダーID"と記入
B1セル: カレンダーIDを入力するセル
A2セル: "開始日"と記入
B2セル: 開始日を入力するセル（例: "2023-01-01"）
A3セル: "終了日"と記入
B3セル: 終了日を入力するセル（例: "2023-12-31"）
GASスクリプト
javascript
Copy code
function getCalendarEvents() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var calendarId = sheet.getRange("B1").getValue();
  var startDate = new Date(sheet.getRange("B2").getValue());
  var endDate = new Date(sheet.getRange("B3").getValue());
  
  var calendar = CalendarApp.getCalendarById(calendarId);
  var events = calendar.getEvents(startDate, endDate);
  
  var data = [];
  for (var i = 0; i < events.length; i++) {
    var event = events[i];
    data.push([
      event.getTitle(),
      event.getStartTime(),
      event.getEndTime(),
      event.getDescription(),
      event.getLocation()
    ]);
  }
  
  sheet.getRange(5, 1, data.length, 5).setValues(data);
}
使い方
スプレッドシートにカレンダーID、開始日、終了日を入力します。
スクリプトエディタで上記のスクリプトを貼り付け、実行します。
スプレッドシートの5行目からイベントのタイトル、開始時刻、終了時刻、説明、場所が出力されます。
注意点
カレンダーIDが正しいことを確認してください。
GASには実行時間の制限がありますので、イベントが多すぎる場合はエラーが発生する可能性があります。
このスクリプトで基本的なスケジュールの取得と出力が可能です。カスタマイズや追加機能が必要な場合は、スクリプトを調整してみてくださいね。


スクリプトの修正
既存のスクリプトに以下の変更を加えます。

出力範囲の初期化: 既存のデータをクリアするための機能を追加します。
データの出力: 新しいスケジュールデータを出力します。
修正後のスクリプト
javascript
Copy code
function getCalendarEvents() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var calendarId = sheet.getRange("B1").getValue();
  var startDate = new Date(sheet.getRange("B2").getValue());
  var endDate = new Date(sheet.getRange("B3").getValue());

  // 出力範囲を初期化
  sheet.getRange("A5:E").clearContent();

  var calendar = CalendarApp.getCalendarById(calendarId);
  var events = calendar.getEvents(startDate, endDate);

  var data = [];
  for (var i = 0; i < events.length; i++) {
    var event = events[i];
    data.push([
      event.getTitle(),
      event.getStartTime(),
      event.getEndTime(),
      event.getDescription(),
      event.getLocation()
    ]);
  }

  // 新しいデータを出力
  if (data.length > 0) {
    sheet.getRange(5, 1, data.length, 5).setValues(data);
  }
}
使い方
スプレッドシートに必要な情報（カレンダーID、開始日、終了日）を入力します。
スクリプトエディタで上記の修正されたスクリプトを貼り付け、実行します。
スプレッドシートの5行目から新しいスケジュール情報が出力され、既存のデータはクリアされます。
注意点
スプレッドシートのフォーマットによっては、初期化する範囲が異なる場合があるので、sheet.getRange("A5:E").clearContent(); の範囲を適宜調整してください。
この修正により、スプレッドシートの出力範囲が初期化され、最新のカレンダー情報のみが表示されるようになります。試してみてくださいね。



スプレッドシートからGoogleカレンダーにスケジュールを登録するGoogle Apps Scriptを作成する方法を説明します。このスクリプトでは、スプレッドシートに記入されたスケジュール情報を読み取り、同じフォーマットでカレンダーにイベントとして追加します。

スプレッドシートのフォーマット
スプレッドシートには、イベントの詳細を以下のような形式で入力します。

A列: イベントのタイトル
B列: 開始日時（例: "2023-01-01T09:00:00"）
C列: 終了日時（例: "2023-01-01T10:00:00"）
D列: 説明
E列: 場所
GASスクリプト
以下は、スプレッドシートからカレンダーにスケジュールを追加するためのスクリプトです。

javascript
Copy code
function addEventsToCalendar() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var calendarId = sheet.getRange("B1").getValue();
  var calendar = CalendarApp.getCalendarById(calendarId);

  // スプレッドシートからイベントのデータを取得
  var startRow = 5;  // スケジュールの開始行
  var numRows = sheet.getLastRow() - startRow + 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var title = row[0];      // タイトル
    var startTime = new Date(row[1]); // 開始日時
    var endTime = new Date(row[2]);   // 終了日時
    var description = row[3]; // 説明
    var location = row[4];    // 場所

    // カレンダーにイベントを追加
    calendar.createEvent(title, startTime, endTime, {description: description, location: location});
  }
}
使い方
スプレッドシートにイベントの詳細（タイトル、開始日時、終了日時、説明、場所）を入力します。
スクリプトエディタで上記のスクリプトを貼り付け、実行します。
指定されたカレンダーに新しいイベントが追加されます。
注意点
開始日時と終了日時は、ISO 8601フォーマット（例: "2023-01-01T09:00:00"）で入力してください。
スクリプト実行前に、カレンダーIDが正しく入力されていることを確認してください。
このスクリプトを使うことで、スプレッドシートに入力されたスケジュールを簡単にGoogleカレンダーに登録できます。ぜひ試してみてくださいね。

1. カレンダーからスケジュールを取得するスクリプト
javascript
Copy code
function getCalendarEventsWithColor() {
  // スプレッドシートのアクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // スプレッドシートからカレンダーID、開始日、終了日を取得
  var calendarId = sheet.getRange("B1").getValue();
  var startDate = new Date(sheet.getRange("B2").getValue());
  var endDate = new Date(sheet.getRange("B3").getValue());

  // カレンダーIDを使用してカレンダーを取得
  var calendar = CalendarApp.getCalendarById(calendarId);
  
  // 指定された期間のイベントを取得
  var events = calendar.getEvents(startDate, endDate);

  // 出力範囲を初期化（以前のデータをクリア）
  sheet.getRange("A5:F").clearContent();

  // イベントデータを格納するための配列
  var data = [];
  
  // 取得したイベントの情報を配列に追加
  for (var i = 0; i < events.length; i++) {
    var event = events[i];
    data.push([
      event.getTitle(),            // タイトル
      event.getStartTime(),        // 開始時刻
      event.getEndTime(),          // 終了時刻
      event.getDescription(),      // 説明
      event.getLocation(),         // 場所
      event.getColor() || ''       // 色（ない場合は空文字をセット）
    ]);
  }

  // スプレッドシートにイベント情報を出力
  if (data.length > 0) {
    sheet.getRange(5, 1, data.length, 6).setValues(data);
  }
}
2. スプレッドシートからカレンダーにスケジュールを登録するスクリプト
javascript
function addEventsToCalendar() {
  // スプレッドシートのアクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // カレンダーIDを取得
  var calendarId = sheet.getRange("B1").getValue();
  
  // カレンダーIDを使用してカレンダーを取得
  var calendar = CalendarApp.getCalendarById(calendarId);

  // 登録確認のためのメッセージを準備
  var confirmationMessage = "カレンダー: " + calendar.getName() + "\n\n";
  confirmationMessage += "以下のスケジュールを登録しますか？\n";

  // スケジュールデータの開始行と行数を取得
  var startRow = 5;
  var numRows = sheet.getLastRow() - startRow + 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, 6);
  var data = dataRange.getValues();

  // 確認メッセージにスケジュールの詳細を追加
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var title = row[0];
    var startTime = row[1];
    var endTime = row[2];
    confirmationMessage += "\nタイトル: " + title + " (" + startTime + " から " + endTime + ")";
  }

  // ユーザーに確認を求める
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert("スケジュール登録の確認", confirmationMessage, ui.ButtonSet.YES_NO);

  // YESが選択された場合、スケジュールをカレンダーに登録
  if (response == ui.Button.YES) {
    for (var i = 0; i < data.length; i++) {
      var row = data[i];
      var title = row[0];            // タイトル
      var startTime = new Date(row[1]); // 開始日時
      var endTime = new Date(row[2]);   // 終了日時
      var description = row[3];     // 説明
      var location = row[4];        // 場所
      var color = row[5];           // 色

      // カレンダーにイベントを追加
      var event = calendar.createEvent(title, startTime, endTime, {description: description, location: location});
      if (color) {
        event.setColor(color);      // 色を設定
      }
    }
    ui.alert("スケジュールが登録されました。");
  } else {
    ui.alert("スケジュールの登録がキャンセルされました。");
  }
}
  // YESが選択された場合、スケジュールをカ








function deleteEventsFromCalendar() {
  // スプレッドシートのアクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // カレンダーIDを取得
  var calendarId = sheet.getRange("B1").getValue();
  
  // カレンダーIDを使用してカレンダーを取得
  var calendar = CalendarApp.getCalendarById(calendarId);

  // 削除確認のためのメッセージを準備
  var confirmationMessage = "カレンダー: " + calendar.getName() + "\n\n";
  confirmationMessage += "以下のスケジュールを削除しますか？\n";

  // スケジュールデータの開始行と行数を取得
  var startRow = 5;
  var numRows = sheet.getLastRow() - startRow + 1;
  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  var data = dataRange.getValues();

  // 確認メッセージにスケジュールの詳細を追加
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var title = row[0];
    var startTime = row[1];
    var endTime = row[2];
    confirmationMessage += "\nタイトル: " + title + " (" + startTime + " から " + endTime + ")";
  }

  // ユーザーに確認を求める
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert("スケジュール削除の確認", confirmationMessage, ui.ButtonSet.YES_NO);

  // YESが選択された場合、スケジュールをカレンダーから削除
  if (response == ui.Button.YES) {
    for (var i = 0; i < data.length; i++) {
      var row = data[i];
      var title = row[0];
      var startTime = new Date(row[1]);
      var endTime = new Date(row[2]);

      // 指定された期間内のイベントを取得
      var events = calendar.getEvents(startTime, endTime);

      for (var j = 0; j < events.length; j++) {
        var event = events[j];
        // イベントのタイトルが一致する場合に削除
        if (event.getTitle() === title) {
          event.deleteEvent();
        }
      }
    }
    ui.alert("指定されたスケジュールが削除されました。");
  } else {
    ui.alert("スケジュールの削除がキャンセルされました。");
  }
}