GAS Sample_スプレッドシートから新規スケジュール作成(その2)
前回はスプレッドシートから新規スケジュール作成するスクリプトを紹介しました。
前回では1つの「マイカレンダー」での運用想定ですが、今回は2つ以上の「マイカレンダー」での運用を実装します。
シート[inputSheet]を用意します。(B列に「カレンダー名」追加)
シート[inputSheet]
列A_処理対象 (チェックボックス)
列B_ カレンダー名
列C_ スケジュール名
列D_終日 (の場合はこちらに日付のみ記入)
列E_日付
列F_開始時刻 hh:mm
列G_終了時刻 hh:mm
列H_説明(optional)
列I_場所(optional)
もう1つ、カレンダー名とカレンダーIDを管理するシート[calSheet]を用意。
シート[calSheet]
列A_カレンダー名
列B_カレンダーID
スクリプトはこちら。
function createSchedule2() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const inputSheet = ss.getSheetByName('inputSheet');
const calSheet = ss.getSheetByName('calSheet');
const lastRow = inputSheet.getLastRow();
//予定の一覧・カレンダー名の一覧・カレンダーIDの一覧を取得
const data = inputSheet.getRange(2, 1, lastRow, 9).getValues();
const calName = calendarSheet.getRange(2, 1, calendarSheet.getLastRow(), 1).getValues();
const calID = calendarSheet.getRange(2, 2, calendarSheet.getLastRow(), 1).getValues();
let calendar;
//順に予定を作成
for (i = 0; i <= lastRow - 2; i++) {
//列Aのチェックボックスがオフ(false)なら何もしない
if (data[i][0] == false) {
//「終日」が空白なら「開始日時」・「終了日時」を設定して予定を作成
} else if (data[i][3] == '') {
//指定されたカレンダー名のIDを取得
for (j = 0; j <= calName.length; j++) {
if (data[i][1] == calName[j][0]) {
calendar = calID[j][0];
break;
}
}
//予定の時間を取得
const startTime = new Date(data[i][4]);
startTime.setHours (data[i][5].getHours());
startTime.setMinutes(data[i][5].getMinutes());
const endTime = new Date(data[i][4]);
endTime.setHours (data[i][6].getHours());
endTime.setMinutes(data[i][6].getMinutes());
//予定のコンテンツを取得
const title = data[i][2];
const description = data[i][7];
const location = data[i][8];
//予定を作成
CalendarApp.getCalendarById(calendar).createEvent(
title,
startTime,
endTime,
{
description: description,
location: location
}
);
//「終日」が空白でないなら日付を設定して予定を作成
} else {
//指定されたカレンダー名のIDを取得
for (j = 0; j <= calName.length; j++) {
if (data[i][1] == calName[j][0]) {
calendar = calID[j][0];
break;
}
}
//予定のコンテンツを取得
const title = data[i][2];
const date = data[i][3];
const description = data[i][7];
const location = data[i][8];
//予定を作成
CalendarApp.getCalendarById(calendar).createAllDayEvent(
title,
date,
{
description: description,
location: location
}
);
}
//予定作成後、チェックボックスをオフにする
inputSheet.getRange(i + 2, 1).setValue(false);
}
}
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('スクリプト')
.addItem('cal入力シート→カレンダーに反映', 'createSchedule2')
.addToUi();
}
この記事が気に入ったらサポートをしてみませんか?