ÂżPara quiĂ©n es este artĂculo?
- Para personas que utilizan activamente el servicio Google Calendar
- Para las personas que tienen archivos de tablas con horarios y que les gustarĂa trabajar con ellos de manera más productiva: tenga siempre los prĂłximos eventos frente a sus ojos, reciba notificaciones con recordatorios por correo o notificaciones automáticas
- Para las personas que desean familiarizarse rápidamente con Google Apps Script, comprender qué es y dónde se puede aplicar
Qué se necesita
- cuenta Google
- Conocimientos básicos de JavaScript
1. Crea una tabla en Hojas de cálculo de Google.
Esto se puede hacer yendo a su página de Google Drive.
Figura: 1. Al hacer clic con el botĂłn derecho en el espacio de trabajo, se abre un menĂş contextual donde debe seleccionar "Hojas de cálculo de Google" - "Crear una tabla vacĂa".
En la tabla creada, debes copiar el horario que tienes, en mi caso, este es el horario de clases en la universidad. Es importante que las tablas contengan los siguientes campos:
- tĂtulo del evento
- Fecha del evento
- Hora de inicio
- Hora de finalizaciĂłn o duraciĂłn (sin embargo, esto no es necesario; como resultado, puede establecer algĂşn valor predeterminado general para la duraciĂłn del evento, por ejemplo, 1 hora, o incluso hacer que el evento dure todo el dĂa)
Toda la otra informaciĂłn, en mi caso - el profesor, el tipo de lecciĂłn (conferencia, seminario, etc.), se puede enviar a la descripciĂłn del evento.
. 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, , - .
Estoy abierto a la crĂtica constructiva, me alegrará si señala las deficiencias, aconseja quĂ© se puede mejorar y quĂ© se puede cambiar en el artĂculo.