見出し画像

GAS Sample_スプレッドシートから新規スケジュール作成(その2)

前回はスプレッドシートから新規スケジュール作成するスクリプトを紹介しました。

前回では1つの「マイカレンダー」での運用想定ですが、今回は2つ以上の「マイカレンダー」での運用を実装します。

シート[inputSheet]を用意します。(B列に「カレンダー名」追加)

シート[inputSheet]

列A_処理対象 (チェックボックス)
列B_ カレンダー名
列C_ スケジュール名
列D_終日 (の場合はこちらに日付のみ記入)
列E_日付
列F_開始時刻 hh:mm
列G_終了時刻 hh:mm
列H_説明(optional)
列I_場所(optional)

画像1

もう1つ、カレンダー名とカレンダーIDを管理するシート[calSheet]を用意。

シート[calSheet]

列A_カレンダー名
列B_カレンダーID

画像2

スクリプトはこちら。

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();
}

この記事が気に入ったらサポートをしてみませんか?