Tere tulemast minu GoogleAppsScript, kuhu ma näitan 5 funktsiooni, mille valisin.
5 minu funktsiooni teevad selliseid asju nagu:
- Loo menüü, kus on kõik funktsioonid ja lühike tere.
- Oskus sisestada kuupäeva ja kellaaja ning sündmuse nime kasutajaliidese abil.
- Loo Callendari rakenduses seatud sündmusi, lugedes tabelist andmeid.
- Saada e-kiri tabeli praeguse sisuga.
- Tuvasta, millal lahtreid käsitsi muudetakse, ja kirjuta üles muutmise täpne kuupäev ja kellaaeg.
ALUSED
Esiteks, pärast Google Sheetsi avamist peame sisenema GoogleAppsScripti liidesesse. Seda saab teha järgmiste sammudega:


Esiteks on onOpen funktsioon, mis on päästik, mis käivitub iga kord, kui tabel avatakse. Minu puhul loob see tööriistaribale lisamenüü, kus kuvatakse kõik funktsioonid ja mida saab kasutada:
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Funktsioonid')
.addItem('Tere', 'showGreeting')
.addItem('Redigeeri lehe andmeid', 'editSheetData')
.addItem('Loo kalendrisündmus', 'createCalendarEvent')
.addItem('Saada meiliaruanne', 'sendEmailReport')
.addItem('Andmete toomine API-st', 'fetchDataFromAPI')
.addToUi();
}
function showGreeting() {
SpreadsheetApp.getUi().alert('Tere! Need on minu funktsioonid!');
}
Siin on näide:


KASUTUSLIIDE JA ANDMETE SISESTAMINE
editSheetData funktsiooni abil saame kasutajaliidese kaudu tabelisse rohkem andmeid lisada:
function editSheetData() {
const ui = SpreadsheetApp.getUi();
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ui.alert(
"Sündmuse redigeerimine",
"Kuupäeva, kellaaja ja sündmuse värskendamiseks valige lahter vastavalt A- või B-veerust.",
ui.ButtonSet.OK
);
const rowResponse = ui.prompt(
"Sisestage rea number, mida soovite muuta.:",
ui.ButtonSet.OK_CANCEL
);
if (rowResponse.getSelectedButton() !== ui.Button.OK) {
ui.alert("Kasutaja tühistas toimingu.");
return;
}
const rowNumber = parseInt(rowResponse.getResponseText());
if (isNaN(rowNumber) || rowNumber < 2) {
ui.alert("Vale reanumber.");
return;
}
const eventResponse = ui.prompt(
"Sisestage B-veerule uus sündmuse kirjeldus:",
ui.ButtonSet.OK_CANCEL
);
if (eventResponse.getSelectedButton() !== ui.Button.OK) {
ui.alert("Kasutaja tühistas toimingu.");
return;
}
const newEvent = eventResponse.getResponseText();
const dateResponse = ui.prompt(
"Sisestage veeru A kuupäev ja kellaaeg (DD.MM.YY HH:MM):",
ui.ButtonSet.OK_CANCEL
);
if (dateResponse.getSelectedButton() !== ui.Button.OK) {
ui.alert("Kasutaja tühistas toimingu.");
return;
}
const dateValue = dateResponse.getResponseText();
sheet.getRange(rowNumber, 1).setValue(dateValue);
sheet.getRange(rowNumber, 2).setValue(newEvent);
ui.alert("Sündmust on uuendatud ja ajatempel on määratud!");
}
Nii peaks see funktsiooni kasutamisel välja nägema:






LAUADE LUGEMINE JA KALENDRISÜNDMUSTE LOOMINE
Funktsioon createCalendarEvent loeb eelmise funktsiooniga täidetud tabelit ja loob kalendrirakenduses sama kuupäeva, kellaaja ja nimega sündmuse:
function createCalendarEvent() {
const sheet = SpreadsheetApp.getActiveSheet();
const row = sheet.getRange(2, 1, 1, 2).getValues()[0];
const start = new Date(row[0]);
const end = new Date(start.getTime() + 60 * 60 * 1000);
CalendarApp.getDefaultCalendar().createEvent(
row[1], start, end
);
}
Pärast funktsiooni käivitamist peaks loodud sündmus kalendris välja nägema järgmine:

TABELI SISU SAATMINE E-POSTI TEEL
Funktsioon sendEmailReport loeb kogu tabeli sisu ja väljastab selle määratud saaja e-posti aadressile:
function sendEmailReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const recipient = "ilyagerskevits@gmail.com";
const subject = "Tabeliaruanne";
const body = "Siin on andmed:\n" + sheet.getRange("A1:B5").getDisplayValues().join("\n");
MailApp.sendEmail(recipient, subject, body);
}
Pärast funktsiooni käivitamist peaks aadressil olev e-kiri välja nägema selline:

ANDMETE SAAMINE HTTP-PÄRINGUST
Funktsioon fetchDataFromAPI võimaldab AppsScriptil saata HTTP-päringuid välistele teenustele ja kuvada tulemust logipaneelil:
function fetchDataFromAPI() {
const url = "https://jsonplaceholder.typicode.com/todos/1";
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
Logger.log("Title: " + data.title);
}
Selle täpse kohatäidet kasutades peaks funktsioon väljundina tagastama järgmise:

VASTUSE KÄSITSI MUUTMINE
Funktsioon onEdit käivitub iga kord, kui rakendus tuvastab muudatuse ja käivitab talle antud funktsiooni. Minu töös paneb see iga kord, kui lahtreid käsitsi muudetakse (ilma editSheetData), sellele reale ajatempli koos muutmise kuupäeva ja kellaajaga:
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const editedCell = e.range;
const WATCHED_COLUMNS = [1, 2];
const TIMESTAMP_COLUMN = 4;
if (editedCell.getRow() === 1) return;
if (WATCHED_COLUMNS.includes(editedCell.getColumn())) {
const now = new Date();
const day = String(now.getDate()).padStart(2, '0');
const month = String(now.getMonth() + 1).padStart(2, '0');
const year = now.getFullYear();
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const timestamp = `Viimati manuallne muudetamine: ${day}.${month}.${year} ${hours}:${minutes}`;
sheet.getRange(editedCell.getRow(), TIMESTAMP_COLUMN).setValue(timestamp);
}
}
Enne:

Pärast:
