【営業でも分かる!】スプレッドシートに記載されたスケジュールで時間指定が無い場合は終日予定に表示する

前回は、スプレッドシートに記載されたスケジュールを一気にGoogleカレンダーに反映する。。。
まで行いました。

まだご覧になられてない方は、まずこちらから御覧ください。

今回は、スプレッドシートに記載されたスケジュールの中で、時間の記載が無い場合
⇒Googleカレンダーの終日の箇所に表示させる。
をやってみます。
※前回の派生版とお考えください。

目次

今回の目標

スクリプト実行前

⇒実行(Ctrl+R)。。。
下記の様な表示 ↓↓↓↓

スクリプト実行後

実現のスクリプトと解説

下記をコンテナバインドスクリプトのスクリプトエディターにコピペして、
保存(Ctrl+S)
⇒スクリプトを実行(Ctrl+R)。。。

【前提】コンテナバインドスクリプトで作成しています。

//ファンクション名を「registCalendar2」にする(registCalendar2の部分は、何でも良いです)
function registCalendar2(){

  // 紐付けるカレンダーを「.getOwnedCalendarById」を使って指定する
  // IDは、登録したいメールアドレスで大丈夫です。
  var calendar = CalendarApp.getOwnedCalendarById("○○○○@□□□□□.□□□");

 //スプレッドシートの「アクティブなスプレッドシート全体」を取得し、それを「ss」に代入
 var ss = SpreadsheetApp.getActiveSpreadsheet();

 //「ss(アクティブなスプレッドシート全体)」の「アクティブなシートだけ」を「sheet」に代入
 var sheet = ss.getActiveSheet();

 //カレンダーに入力する内容が何件でも良い様に「sheet(アクティブなシート)」のコンテンツ最後行の位置を「lastRow」に代入
  var lastRow = sheet.getLastRow();

  //表を取得するために、範囲『2行1列目から、7行分(lastRowは1行目も含んだ数字を吐き出しているので-1する)、7列分』を指定し、取得。
  var contents = sheet.getRange(2,1,lastRow-1,7).getValues();

 //繰り返し文(for文)を使って、コンテンツ(内容)の個数の数だけ繰り返す処理を行う
  for(var i = 0; i < contents.length; i++) {

    // 「contents」は2次元配列なので、分割代入を行い、そのまま変数として取得します。contents[i]は、表の1行のデータ。
    var [number,person,year,day,dayOfWeek,startTime,endTime] = contents[i];

    // スタートタイム、もしくはエンドタイムのどちらかが空だった場合
    if(startTime == "" ||endTime == ""){

      // 終日予定が作成ができるメソッド「.createAllDayEvent」でカレンダーに担当と日付を表示させる
      calendar.createAllDayEvent(person,day);

    // 上記の条件に当てはまらない場合は、下記を実行
    }else{

      // コンテンツ(内容)の開始年月日(day)を「startDateObje」に代入
      var startDateObje = new Date(day)

      // 「setHours」を使用することで、その引数を「startDateObje」の時間として設定。
      startDateObje.setHours(startTime.getHours());

      // 「setMinutes」を使用することで、その引数を「startDateObje」の分数として設定。
      startDateObje.setMinutes(startTime.getMinutes());

      // コンテンツ(内容)の終了年月日(day)を「endDateObje」に代入
      var endDateObje = new Date(day)

      // 「setHours」を使用することで、その引数を「endDateObje」の時間として設定。
      endDateObje.setHours(endTime.getHours());

      // 「setMinutes」を使用することで、その引数を「endDateObje」の分数として設定。
      endDateObje.setMinutes(endTime.getMinutes());
      
      // 最後に「createEvent」に引数を入れて、カレンダーに登録する処理を行う
      calendar.createEvent(person,startDateObje,endDateObje);
    }
  }
}

どうでしょうか?カレンダーの上部に予定が表示されましたでしょうか?

重要ポイント:

今回のスクリプトで重要なのは、、

if(startTime == "" ||endTime == ""){
}else{
}

かと思います。

ifの条件分岐・複数条件分岐

if (こちらに判別する条件式1を記載) {
  条件式1が正しい(真)の時に実行する処理;
  ...;
}else{
  条件式1では無い(偽)時に実行する処理;
  ...;
}

英語のifと同じように「もし~ならば…」となり、条件式1が「真」or「偽」で実行する処理が変わるようにできます。スプレッドシートの1月11日の行の処理の際は、開始時間・終了時間があるので、「条件式1」には当てはまらず、「else以降」の処理が実行され、1月17日も同じく「else以降」の処理が実行され、以降も同じです。ただ、2月22日に関しては、「条件式1」に当てはまるので「真」の方の処理が行われ、また2月28日は、開始時間・終了時間があるので、else以降の処理が実行され、、、と、繰り返します。

条件式が複数ある場合

if (こちらに1つ目の条件式1を記載) {
  条件式1が正しい(真)の時に実行する処理;
  ...;
}else if(こちらに2つ目の条件式2を記載){
  条件式2が正しい(真)の時に実行する処理;
  ...;
}else{
  条件式1・2が正しく無い(偽)、つまり、どの条件式にも該当しなかった時に実行する処理;
  ...;
}

上記の様に、間に

}else if(条件式α){

を使用することで、条件式を増やしていくことが可能です。

今回、「==」や「||」の演算子も出てきておりますが、演算子に関しては、また改めてまとめページを作成しようと思っておりますので、お待ち下さい。

ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA