Google Apps Script: transférer un calendrier d'une feuille de calcul vers un calendrier

A qui est destiné cet article?



  • Pour les personnes qui utilisent activement le service Google Agenda
  • Pour les personnes qui ont des fichiers de table avec des horaires et qui souhaitent travailler avec eux de maniĂšre plus productive - ayez toujours les Ă©vĂ©nements Ă  venir devant leurs yeux, recevez des notifications avec des rappels par courrier ou des notifications push
  • Pour les personnes qui souhaitent dĂ©couvrir rapidement Google Apps Script, comprendre de quoi il s'agit et oĂč il peut ĂȘtre appliquĂ©


Ce qui est necessaire



  • Compte google
  • Connaissance de base de JavaScript


1. Créez une feuille de calcul dans Google Sheets



Cela peut ĂȘtre fait en accĂ©dant Ă  votre page Google Drive.





Figure: 1. Un clic droit sur l'espace de travail ouvre un menu contextuel dans lequel vous devez sélectionner "Google Sheets" - "Créer un tableau vide"



Dans le tableau créé, vous devez copier l'horaire que vous avez, dans mon cas, c'est l'horaire des cours à l'université. Il est important que les tableaux contiennent les champs suivants:



  • titre de l'Ă©vĂ©nement
  • Date de l'Ă©vĂ©nement
  • Heure de dĂ©but
  • Heure de fin ou durĂ©e (cependant, cela n'est pas nĂ©cessaire - par consĂ©quent, vous pouvez dĂ©finir une valeur par dĂ©faut gĂ©nĂ©rale pour la durĂ©e de l'Ă©vĂ©nement, par exemple, 1 heure, ou mĂȘme faire durer l'Ă©vĂ©nement toute la journĂ©e)


, — , (, ..), .





. 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, , - .


Je suis ouvert Ă  la critique constructive, je serai heureux si vous signalez les lacunes, conseillez ce qui peut ĂȘtre amĂ©liorĂ© et ce qui peut ĂȘtre changĂ© dans l'article.



Que lire ensuite






All Articles