LoginSignup
0
0

GAS カレンダー入出力

Last updated at Posted at 2023-12-01

スクリプトの概要
スプレッドシートの準備: スプレッドシートにカレンダー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("スケジュールの削除がキャンセルされました。");
}
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0