Googleカレンダーをスプレッドシートに書き出す方法[GAS]

Googleカレンダーの内容をスプレッドシートに簡単に書き出せる方法が知りたいな。

GASを記載する場所

GASを作成するには、スプレッドシートの画面上部にて [拡張機能] ー [Apps Script] を選択

Googleカレンダーをスプレッドシートに書き出す方法

ママ
ママ

下のプログラミング記述をオレンジの部分にコピー
※ function myFunction(){}は削除。

変更が必要な箇所を修正する。

1)GASを貼り付け

function callender() {
// スプレッドシートの読込
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('「※シートの名前」');

// カレンダーをIDで読み込む
  const cal=CalendarApp.getCalendarById('「※○○@gmail.com」'); 

// カレンダーのイベントの期間を指定
  const startTime = new Date('2022/01/01 00:00:00');//取得したい日付の開始日
  const endTime = new Date('2022/02/01 00:00:00'); //取得したい日付の終了日
  const event = cal.getEvents(startTime,endTime); 

// イベントをスプレッドシートへ出力
  var j = 1 ;
  for(var i=0;i<event.length; i++){
    sheet.getRange('a'+j).setValue(event[i].getTitle());//タイトル
    sheet.getRange('b'+j).setValue(event[i].getStartTime());//開始時刻  
    sheet.getRange('c'+j).setValue(event[i].getEndTime());//終了時刻
    j++;
  }
}

2)修正箇所を修正

「※シートの名前」出力したいシート名を記載
「※○○@gmail.com」は、Googleカレンダー所有のメールアドレスを記載
取得したい日付を変更する

3)実行ボタンを押下(右端にある、デプロイが終わってない方は済ませてから、実行を押す必要がある)

同じ日付の予定は、1行にできないかな。

こちらだと、同じ日付を1行にカンマ区切りで表示することができます。

同じ日付の予定を1行に書き出す方法

function callender() {
// スプレッドシートにカレンダーの内容を読込
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シートの名前「※シートの名前」');

// 結果を出力するシート名を指定 
  let sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('「※シートの名前2」');

// カレンダーをIDで読み込む
  const cal=CalendarApp.getCalendarById('「※○○@gmail.com」'); 

// カレンダーのイベントの期間を指定
  const startTime = new Date('2022/01/01 00:00:00');//取得したい日付の開始日
  const endTime = new Date('2022/02/01 00:00:00');//取得したい日付の終了日
  const event = cal.getEvents(startTime,endTime); 

// イベントをスプレッドシートへ出力
  var j = 1 ;
  for(var i=0;i<event.length; i++){
    sheet.getRange('a'+j).setValue(event[i].getTitle());//タイトル
    sheet.getRange('b'+j).setValue(event[i].getStartTime());//開始時刻  
    sheet.getRange('c'+j).setValue(event[i].getEndTime());//終了時刻
 
    j++;
  }

  //編集(同じ日付の予定をカンマ区切りで1行にする)
  // A列とB列のデータを二次元配列として取得 
  let array = sheet.getRange('A:B').getValues();
  const lastRow = sheet.getRange(sheet.getMaxRows(),1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();

  // 結果を格納する配列 
  let result = [];
  // 日付をキーとしたオブジェクトを作成 (連想配列)
  let obj = {}; 
  for (let i = 0; i < lastRow; i++) { 
    // 日付 
    let date = Utilities.formatDate(array[i][1], 'JST', 'yyyy-MM-dd'); // B列の値; 

    //内容
    let content = array[i][0]; 
    // オブジェクトに日付が存在しない場合は、新たにキーと値を追加 
    if (!obj [date]) { 
      obj [date] = [content]; 
    } else { 
      // オブジェクトに日付が存在する場合は、値の配列に内容を追加 
      obj [date].push (content); 
    } 
  }

  // オブジェクトのキーと値を配列に変換 
  for (let key in obj) { 
    let value = obj [key]; 
    // 値の配列をカンマ区切りの文字列に変換 
    let str = value.join (`,`); 
    // 結果の配列に日付と文字列を追加 
    result.push ([key, str]); 
  } 

  // 結果を出力する 
  sheet2.getRange(2, 1, result.length, result[0].length).setValues(result);

}

「※シートの名前」出力したいシート名を記載
「※シートの名前2」出力して編集した結果を表示するシート名を記載
「※○○@gmail.com」は、Googleカレンダー所有のメールアドレスを記載
取得したい日付を変更する

[実行]をクリックすると、スプレッドシートに出力される。

ママ
ママ

「承認が必要です」が表示された場合は、こちらを参照に作業をしてね

コメント

タイトルとURLをコピーしました