見出し画像

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


Googleカレンダーに新規予定を作成する際、スプレッドシートに入力したのちGoogle Apps Scriptを用いカレンダーに転記させると便利です。

カレンダーには「繰り返す」という機能がありますが、このGASを用いると

・毎週月曜に定例会議があるが、カレンダーの「繰り返す」機能を用いると月曜日が祝日の場合対応できない
・毎月上旬に定例会議があるが、月によって日程がまちまち

という場合にも対応できます。

またスプレッドシートで管理すれば、「スケジュール名の表記の揺れ」がなくなるメリットもあります。

シート[inputSheet]を用意します。

シート[inputSheet]

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

画像1

スクリプトはこちら。

function createSchedule() {
 const calID      = '**************@group.calendar.google.com';
 const ss         = SpreadsheetApp.getActiveSpreadsheet();
 const inputSheet = ss.getSheetByName('inputSheet');
 const lastRow    = inputSheet.getLastRow();

 //予定の一覧を取得
 const data = inputSheet.getRange(2, 1, lastRow, 8).getValues();

 //順に予定を作成
 for (i = 0; i <= lastRow - 2; i++) {

   //列Aのチェックボックスがオフ(false)なら何もしない
   if (data[i][0] == false) {

     //「終日」が空白なら「開始日時」・「終了日時」を設定して予定を作成
   } else if (data[i][2] == '') {

     //予定の時間を取得
     const startTime = new Date(data[i][3]);
     startTime.setHours  (data[i][4].getHours());
     startTime.setMinutes(data[i][4].getMinutes());

     const endTime = new Date(data[i][3]);
     endTime.setHours  (data[i][5].getHours());
     endTime.setMinutes(data[i][5].getMinutes());

     //予定のコンテンツを取得
     const title       = data[i][1];
     const description = data[i][6];
     const location    = data[i][7];

     //予定を作成
     CalendarApp.getCalendarById(calID).createEvent(
       title,
       startTime,
       endTime,
       {
         description: description,
         location: location
       }
     );

     //「終日」が空白でなければ日付を設定して予定を作成
   } else {

     //予定のコンテンツを取得
     const title       = data[i][1];
     const date        = data[i][2];
     const description = data[i][6];
     const location    = data[i][7];

     //予定を作成
     CalendarApp.getCalendarById(calID).createAllDayEvent(
       title,
       date,
       {
         description: description,
         location: location
       }
     );
   }

   //予定作成後、チェックボックスをオフにする
   inputSheet.getRange(i + 2, 1).setValue(false);

 }
}


function onOpen() {

 SpreadsheetApp.getUi()
   .createMenu('スクリプト')
   .addItem('inputSheet → カレンダーに反映', 'createSchedule')
   .addToUi();
}

予めGoogleカレンダーの「設定」から「カレンダーID」をコピーしておき、「calID」に代入します。

画像3

スクリプトを実行すると、列Aのチェックボックスがオンになった行の予定が一気にカレンダーに反映されます。

IF文を用い、「チェックボックスがオンかオフか」「終日か否か」を判定して処理を分けています。

【エラー,および意図しない結果に至るリスクの認識】

このシートに関して、エラー及び意図しない結果に至る主なリスクは以下のようなことが挙げられます。

●開始時刻より終了時刻が遅い時刻を誤入力する
●日付/開始時刻/終了時刻を記入していない(「終日」を除く)

※続きの記事を書きました。


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