Para quem Ă© este artigo?
- Para pessoas que usam ativamente o serviço Google Agenda
- Para pessoas que têm arquivos de tabela com agendas e que gostariam de trabalhar com eles de forma mais produtiva - sempre tenha os próximos eventos diante de seus olhos, receba notificações com lembretes por e-mail ou notificações push
- Para pessoas que desejam se familiarizar rapidamente com o Script do Google Apps, entenda o que Ă© e onde pode ser aplicado
O que Ă© preciso
- conta do Google
- Conhecimento básico de JavaScript
1. Crie uma tabela no Planilhas Google
Isso pode ser feito na página do Google Drive.
Figura: 1. Clicar com o botão direito do mouse na área de trabalho abre um menu de contexto onde você precisa selecionar "Planilhas Google" - "Criar uma mesa vazia"
Na tabela criada, você precisa copiar o cronograma que você tem, no meu caso, esse é o cronograma de aulas da universidade. É importante que as tabelas contenham os seguintes campos:
- TĂtulo do evento
- Data do evento
- Hora de inĂcio
- Hora de término ou duração (no entanto, isso não é necessário - como resultado, você pode definir algum valor padrão geral para a duração do evento, por exemplo, 1 hora, ou mesmo fazer com que o evento dure o dia todo)
Todas as demais informações, no meu caso - o professor, o tipo de aula (palestra, seminário, etc.), podem ser enviadas para a descrição do 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, , - .
Estou aberto a crĂticas construtivas, ficarei feliz se vocĂŞ apontar as deficiĂŞncias, aconselhar o que pode ser melhorado e o que pode ser alterado no artigo.