this episode means a lot to me

自分のためのブログです。日々のやったこと・ふりかえりを主に書いています

MENU

gasでスプレッドシートからカレンダーへ日報を反映する

概要

以下の記事の続きとして、入力時刻をgoogleカレンダーに自動で反映させて可視化する。 マイカレンダーを複数運用していている点に注意する。

googleカレンダーに登録することで、月次の活動の集計に利用する。

ruzxas.hatenablog.com

やったこと

  1. スプレッドシートに日報を登録する f:id:ruzxas:20200410010816j:plain

  2. gasでスプレッドシートからカレンダーへ予定を登録
      ・スプレッドシートから登録先のカレンダー・タイトル・作業開始・終了日時を取得する
      ・取得した日時をカレンダーに登録する f:id:ruzxas:20200410010834j:plain

  3. マクロをインポートし、スプレッドシート上でgasを実行する
      ・ツール>マクロ>インポートからgasを登録 f:id:ruzxas:20200410010853j:plain

次にやること

gasのトリガを利用を利用し日次で自動的に集計する

補足

作成したgasは以下

function createEventFromSheet() {
  // シートを選択
  var sheet = SpreadsheetApp.getActiveSheet();
 
  // 行を選択
  for(var i = 2; i <= sheet.getLastRow(); i++) {
    // セルの値を取得
    var start = sheet.getRange(i, 1).getValue().toString();
    var end = sheet.getRange(i, 2).getValue().toString();
    var title = sheet.getRange(i, 3).getDisplayValue().toString();
    var name = sheet.getRange(i, 4).getDisplayValue().toString();
    
    // タイトルまたはカレンダー名が未登録の場合、終了する
    if(title.length <= 0 || name.length <=0) {
      break;
    }
    
    // 開始と終了の日時を取得。入力形式はYYYY/MM/DD hh:mm
    var startTime = new Date(start);
    var endTime = new Date(end);
    
    // オプションは必要に応じて
    var options = {
      location: "",
      description: ""
    }
    
    // カレンダーを取得
    //var cal = CalendarApp.getDefaultCalendar();
    //var cal = CalendarApp.getCalendarById("xxxxx@group.calendar.google.com");
    var cal = CalendarApp.getOwnedCalendarsByName(name);//Calendersと配列であることに注意
    Logger.log(cal[0]);
    // カレンダーにイベントを追加
    cal[0].createEvent(title, startTime, endTime, options);
    }
}

参考:Google Apps Script - Google Apps Scriptで、GoogleカレンダーのcreateEvent()がうまくいかない|teratail