Google Appsスクリプト:スプレッドシートからカレンダーにスケジュールを転送する

この記事は誰のためのものですか?



  • Googleカレンダーサービスを積極的に利用している方へ
  • スケジュール付きのテーブルファイルを持っていて、より生産的に作業したい人のために-常に目の前に今後のイベントがある、メールまたはプッシュ通知でリマインダー付きの通知を受け取る
  • Google Apps Scriptについてすぐに知りたい人は、スクリプトとは何か、どこに適用できるかを理解してください。


必要なもの



  • Googleアカウント
  • JavaScriptの基本的な知識


1. GoogleSheetsでテーブルを作成します



これは、Googleドライブページに移動することで実行できます。





図:1.ワークスペースを右クリックすると、コンテキストメニューが開き、[GoogleSheets]-[空のテーブルを作成]を選択する必要があります



作成した表に、自分のスケジュールをコピーする必要があります。私の場合、これは大学での授業のスケジュールです。テーブルに次のフィールドが含まれていることが重要です。



  • イベントタイトル
  • 開催日
  • 始まる時間
  • 終了時間または期間(ただし、これは必須ではありません。その結果、イベントの期間に一般的なデフォルト値を設定できます。たとえば、1時間、またはイベントを1日中継続させることもできます)


, — , (, ..), .





. 2.



2.



2.1.



, , .





. 3. , "", " "



JavaScript. myFunction. , SetCalendar.





. 4. , — SetCalendar



, , . SetCalendar.



2.2.



JavaScript :



console.log("Hello, world!")


Google Apps Script . console Logger:



function SetCalendar() {
  Logger.log("Hello, world!");
}


, "", "" Ctrl+Enter:





. 5.



2.3.





function SetCalendar() {
  //         
  const rowStart = 1;
  const colStart = 1;

  //     
  const colsCount = 5;
  const rowsCount = 67;  

  //  
  var sheet = SpreadsheetApp.getActiveSheet();

  //     
  var range = sheet.getRange(rowStart, colStart, rowsCount, colsCount)
  var data = range.getDisplayValues();
}


11.



SpreadsheetApp — , , Google Sheets.



, — , ( ) . getActiveSheet.



sheet.



, range — , . getRange. :





! 1.

15: getDisplayValues.



! getDisplayValues() , . , , - , , .


2.4.



, , , . :



//-   
  const dateCol = 0;
  const timeCol = 1;
  const typeCol = 2;
  const nameCol = 3;
  const teacherCol = 4;


2.



data , . .



  for (var i in data)
  {
    let row = data[i];

    let classDate = row[dateCol];
    let classPeriod = row[timeCol];
    let classType = row[typeCol];
    let className = row[nameCol];
    let classTeacher = row[teacherCol];

    Logger.log("[DATE] " + classDate);
    Logger.log("[PERIOD] " + classPeriod);
    Logger.log("[TYPE] " + classType);
    Logger.log("[NAME] " + className);
    Logger.log("[TEACHER] " + classTeacher);
    Logger.log("============================================");
  }


for i data, i — , .



3: data i row — .



5-9: — . , row[dateCol]dateCol.



5-9 , , , .



, , .



2.5.



,



function SetCalendar() {
  //         
  const rowStart = 1;
  const colStart = 1;

  //     
  const colsCount = 5;
  const rowsCount = 8;  

  //  
  var sheet = SpreadsheetApp.getActiveSheet();

  //     
  var range = sheet.getRange(rowStart, colStart, rowsCount, colsCount)
  var data = range.getDisplayValues();

  //-   
  const dateCol = 0;
  const timeCol = 1;
  const typeCol = 2;
  const nameCol = 3;
  const teacherCol = 4;

  for (var i in data)
  {
    let row = data[i];

    let classDate = row[dateCol];
    let classPeriod = row[timeCol];
    let classType = row[typeCol];
    let className = row[nameCol];
    let classTeacher = row[teacherCol];

    Logger.log("[DATE] " + classDate);
    Logger.log("[PERIOD] " + classPeriod);
    Logger.log("[TYPE] " + classType);
    Logger.log("[NAME] " + className);
    Logger.log("[TEACHER] " + classTeacher);
    Logger.log("============================================");
  }
}


, :





. 6.



, , , , . ?



:





. 7.



, . , , .



, , , .



, :



  let savedDate = "";

  for (var i in data)
  {
    let row = data[i];

    let classDate = row[dateCol];

        //...

    if (classDate.trim() == "")
    {
      classDate = savedDate;
    }
    else
    {
      savedDate = classDate;
    }

    Logger.log("[DATE] " + classDate);
    //...
    Logger.log("============================================");
  }


savedDate — .



. — , savedDate, savedDate.



2.6.



getDisplayValues(), , , .



, Google Calendar, Date: - , - .



(. 2), dd.mm.yyyy, , , hh:mm-hh.mm.



, Date. Google Apps Script, - . , JS-, - - .



:



function extractTime(timeStr, dateStr)
{
  let sepIdx = timeStr.indexOf(":");

  let hoursStr = timeStr.substring(0, sepIdx);
  let minsStr = timeStr.substring(sepIdx + 1);

  sepIdx = dateStr.indexOf(".");

  let dayStr = dateStr.substring(0, sepIdx);
  let monthStr = dateStr.substring(sepIdx + 1, sepIdx + 3);

  sepIdx = dateStr.indexOf(".", sepIdx + 1);

  let yearStr = dateStr.substring(sepIdx + 1);

  let t = new Date();
  t.setHours(parseInt(hoursStr), parseInt(minsStr));
  t.setYear(parseInt(yearStr));
  t.setMonth(parseInt(monthStr) - 1, parseInt(dayStr));

  return t;
}

function extractPeriod(periodStr, dateStr)
{
  let sepIdx = periodStr.indexOf("-");

  let fromStr = periodStr.substring(0, sepIdx);
  let toStr = periodStr.substring(sepIdx + 1);

  fromStr = fromStr.trim();
  toStr = toStr.trim();

  return {
    from: extractTime(fromStr, dateStr),
    to: extractTime(toStr, dateStr)
  }
}


- , extractPeriod — , .



2.7. Google Calendar



,



let classTimeInfo = extractPeriod(classPeriod, classDate);

let classStartTime = classTimeInfo.from;
let classEndTime = classTimeInfo.to;

let info = ": " + classTeacher + "\n : " + classType;

var event = (CalendarApp.getCalendarsByName(""))[0].createEvent
(
  className,
  classStartTime,
  classEndTime,
  {
    description: info
  }
);

Utilities.sleep(50);


1-6: - , , .



, Google Calendar CalendarApp.



getCalendarsByName .



- getDefaultCalendar, . , - Google Calendar , . -, , .



, , , - , - , , , , , , , .



"", . getCalendarsByName "".



, , :



(CalendarApp.getCalendarsByName(""))[0]


- createEvent. :



  • ( )
  • Data — -
  • Data — -
  • — (description)


— 50 . , , , Google Calendar , API .



3.



,



! , 2. , , , .


function extractTime(timeStr, dateStr)
{
  let sepIdx = timeStr.indexOf(":");

  let hoursStr = timeStr.substring(0, sepIdx);
  let minsStr = timeStr.substring(sepIdx + 1);

  sepIdx = dateStr.indexOf(".");

  let dayStr = dateStr.substring(0, sepIdx);
  let monthStr = dateStr.substring(sepIdx + 1, sepIdx + 3);

  sepIdx = dateStr.indexOf(".", sepIdx + 1);

  let yearStr = dateStr.substring(sepIdx + 1);

  let t = new Date();
  t.setHours(parseInt(hoursStr), parseInt(minsStr));
  t.setYear(parseInt(yearStr));
  t.setMonth(parseInt(monthStr) - 1, parseInt(dayStr));

  return t;
}

function extractPeriod(periodStr, dateStr)
{
  let sepIdx = periodStr.indexOf("-");

  let fromStr = periodStr.substring(0, sepIdx);
  let toStr = periodStr.substring(sepIdx + 1);

  fromStr = fromStr.trim();
  toStr = toStr.trim();

  return {
    from: extractTime(fromStr, dateStr),
    to: extractTime(toStr, dateStr)
  }
}

function SetCalendar() {
  //         
  const rowStart = 1;
  const colStart = 1;

  //     
  const colsCount = 5;
  const rowsCount = 8;  

  //  
  var sheet = SpreadsheetApp.getActiveSheet();

  //     
  var range = sheet.getRange(rowStart, colStart, rowsCount, colsCount)
  var data = range.getDisplayValues();

  //-   
  const dateCol = 0;
  const timeCol = 1;
  const typeCol = 2;
  const nameCol = 3;
  const teacherCol = 4;

  let savedDate = "";

  for (var i in data)
  {
    let row = data[i];

    let classDate = row[dateCol];
    let classPeriod = row[timeCol];
    let classType = row[typeCol];
    let className = row[nameCol];
    let classTeacher = row[teacherCol];

    if (classDate.trim() == "")
    {
      classDate = savedDate;
    }
    else
    {
      savedDate = classDate;
    }

    let classTimeInfo = extractPeriod(classPeriod, classDate);

    let classStartTime = classTimeInfo.from;
    let classEndTime = classTimeInfo.to;

    let info = ": " + classTeacher + "\n : " + classType;

    var event = (CalendarApp.getCalendarsByName(""))[0].createEvent
    (
      className,
      classStartTime,
      classEndTime,
      {
        description: info
      }
    );

    Utilities.sleep(50);
  }
}


4.









  • — , , , ( ). , API Google Sheets Google Apps Script , ;
  • JavaScript, , - .


私は建設的な批判を受け入れます。欠点を指摘し、記事で何を改善し、何を変更できるかをアドバイスしていただければ幸いです。



次に読むべきこと



  • アプリスクリプトの概要
  • アプリスクリプト:カレンダー
  • アプリスクリプト:スプレッドシート



All Articles