Ülesande kirjeldus
Ülesande eesmärk oli luua Google Sheetsi skript, mis tõlgib automaatselt ingliskeelse sõna mitmesse keelde, kui kasutaja sisestab teksti esimesse veergu.

Esialgne kood
Algne skript tegi ainult ühe asja — tõlkis teksti inglise keelest eesti keelde ja kirjutas tulemuse B veergu.
function onEdit(e) {
if (!e) return;
var range = e.range;
var sheet = range.getSheet();
if (sheet.getName() !== "synavara") return;
if (range.getColumn() !== 1) return;
for (var i = 0; i < range.getNumRows(); i++) {
var row = range.getRow() + i;
var cellValue = sheet.getRange(row, 1).getValue();
if (!cellValue) continue;
var translated = LanguageApp.translate(cellValue, 'en', 'et');
sheet.getRange(row, 2).setValue(translated);
}
}
Optimeeritud kood
Pärast tehisintellekti abi lisati järgmised täiustused:
function onEdit(e) {
if (!e) return;
var range = e.range;
var sheet = range.getSheet();
// Leht ja veeru kontroll
if (sheet.getName() !== "synavara") return;
if (range.getColumn() !== 1) return;
// Tõlkekeeled massiivina — lihtne laiendada
var languages = [
{ col: 2, code: "et" }, // eesti
{ col: 3, code: "fr" }, // prantsuse
{ col: 4, code: "ja" }, // jaapani
{ col: 5, code: "lv" } // läti
];
for (var i = 0; i < range.getNumRows(); i++) {
var row = range.getRow() + i;
var cellValue = sheet.getRange(row, 1).getValue();
// Valideerimine: tühi lahter või mitte-tekst
if (!cellValue || typeof cellValue !== "string") continue;
for (var j = 0; j < languages.length; j++) {
try {
var translated = LanguageApp.translate(cellValue, "en", languages[j].code);
sheet.getRange(row, languages[j].col).setValue(translated);
} catch (err) {
// Vea korral punane taust
sheet.getRange(row, languages[j].col).setValue("Viga!");
sheet.getRange(row, languages[j].col).setBackground("#ffc7ce");
}
}
}
}
Tehtud täiustused
| Täiustus | Kirjeldus |
|---|---|
| Mitu keelt | Lisati prantsuse, jaapani ja läti keel |
| Massiiv | Keeled on massiivina — lihtne lisada uusi |
| Valideerimine | Kontrollitakse, et lahter pole tühi ja on tekst |
| try/catch | Vead püütakse kinni, lahtrisse kirjutatakse “Viga!” |
| Visuaalne tagasiside | Vea korral punane taustavärv |

Järeldus
Skript töötab automaatselt ilma nuppu vajutamata. Tehisintellekti abil muutus kood lühemaks, turvalisemaks ja laiendatavamaks. Peamine õppetund: koodi struktuur (massiiv + tsükkel) teeb tulevased muudatused palju lihtsamaks.

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
1. DriveApp
Võimaldab suhelda Google Drive’iga. Selle abil saab faile ja kaustu luua, kustutada, otsida ja hallata.
// Создать
function createFolder() {
const folder = DriveApp.createFolder("Uus kaust");
Logger.log("Loodud: " + folder.getName());
}

// Обновить
function updateFolder() {
const folder = DriveApp.getFoldersByName("Uus kaust").next();
folder.setName("Uuendatud kaust");
Logger.log("Uuendatud: " + folder.getName());
}

// Удалить
function deleteFolder() {
const folder = DriveApp.getFoldersByName("Uuendatud kaust").next();
folder.setTrashed(true);
Logger.log("Kustutatud");
}

2. CalendarApp
Kirjeldus: Kasutatakse suhtlemiseks Google Kalendriga. Saab luua sündmusi, neid muuta, pääseda ligi olemasolevatele sündmustele ja nende üksikasjadele.
// Создать
function createEvent() {
const cal = CalendarApp.getDefaultCalendar();
cal.createEvent("Koosolek", new Date(), new Date(Date.now() + 3600000));
Logger.log("Sündmus loodud");
}

// Обновить
function updateEvent() {
const events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date());
if (events.length) {
events[0].setTitle("Uuendatud koosolek");
Logger.log("Sündmus uuendatud");
}
}

// Удалить
function deleteEvent() {
const events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date());
if (events.length) {
events[0].deleteEvent();
Logger.log("Sündmus kustutatud");
}
}

3. DocumentApp
Kirjeldus: Võimaldab töötada Google Dokumentidega. Saab luua uusi dokumente, teksti redigeerida, formatteerida ja sisu hallata.
// Создать
function createDoc() {
const doc = DocumentApp.create("Uus dokument");
doc.getBody().appendParagraph("Tere, maailm!");
Logger.log("Dokument loodud: " + doc.getId());
}

// Обновить
function updateDoc() {
const doc = DocumentApp.openById("SINU_DOC_ID");
const body = doc.getBody();
body.clear();
body.appendParagraph("Uuendatud tekst!");
Logger.log("Dokument uuendatud");
}

// Удалить
function deleteDoc() {
DriveApp.getFileById("SINU_DOC_ID").setTrashed(true);
Logger.log("Dokument kustutatud");
}

4. SpreadsheetApp
Kirjeldus: Kasutatakse tööks Google Tabelitega. Selle abil saab luua ja muuta tabeleid, hallata lehti, vahemikke ja andmeid.
// Создать
function createSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ss.insertSheet("Uus leht");
Logger.log("Leht loodud");
}

// Обновить
function updateSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Uus leht");
sheet.setName("Uuendatud leht");
sheet.getRange("A1").setValue("Tere!");
Logger.log("Leht uuendatud");
}

// Удалить
function deleteSheet() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Uuendatud leht");
ss.deleteSheet(sheet);
Logger.log("Leht kustutatud");
}

5. FormsApp
Kirjeldus: Võimaldab luua ja muuta Google Vormide küsimusi, vormi seadeid ning koguda vastuseid.
// Создать
function createForm() {
const form = FormApp.create("Küsitlus");
form.addMultipleChoiceItem()
.setTitle("Mis on sinu lemmikvärv?")
.setChoiceValues(["Punane", "Roheline", "Sinine"]);
Logger.log("Vorm loodud: " + form.getId());
}

// Обновить
function updateForm() {
const form = FormApp.openById("SINU_FORM_ID");
form.setTitle("Uuendatud küsitlus");
const items = form.getItems();
if (items.length) {
items[0].setTitle("Uus küsimus");
}
Logger.log("Vorm uuendatud");
}

// Удалить
function deleteFormItem() {
const form = FormApp.openById("SINU_FORM_ID");
const items = form.getItems();
if (items.length) {
form.deleteItem(items[0]);
Logger.log("Küsimus kustutatud");
}
}

6. PropertiesService
Kirjeldus: Annab juurdepääsu andmesalvestusele, kus saab salvestada kasutaja seadeid, näiteks muutujaid, mis peavad olema kättesaadavad skripti käivitamise ajal. Toetab mitut taset (skript, kasutaja, dokument).
// Создать
function createProperty() {
PropertiesService.getUserProperties().setProperty("username", "admin");
Logger.log("Atribuut loodud");
}

// Обновить
function updateProperty() {
PropertiesService.getUserProperties().setProperty("username", "uus_kasutaja");
Logger.log("Atribuut uuendatud: " +
PropertiesService.getUserProperties().getProperty("username"));
}

// Удалить
function deleteProperty() {
PropertiesService.getUserProperties().deleteProperty("username");
Logger.log("Atribuut kustutatud");
}

7. UrlFetchApp
Kirjeldus: Võimaldab saata HTTP-päringuid välistele API-dele ja andmeid vastu võtta. Kasulik teiste veebiteenustega integreerimiseks.
// GET — получить
function getData() {
const response = UrlFetchApp.fetch("https://jsonplaceholder.typicode.com/posts/1");
Logger.log("GET: " + response.getContentText());
}

// POST — создать
function postData() {
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify({ title: "Uus postitus", body: "Sisu", userId: 1 })
};
const response = UrlFetchApp.fetch("https://jsonplaceholder.typicode.com/posts", options);
Logger.log("POST: " + response.getContentText());
}

// DELETE — удалить
function deleteData() {
const options = { method: "delete" };
UrlFetchApp.fetch("https://jsonplaceholder.typicode.com/posts/1", options);
Logger.log("DELETE tehtud");
}

8. Utilities
Kirjeldus: Sisaldab abifunktsioone, näiteks Base64 kodeerimine ja dekodeerimine, juhuslike numbrite genereerimine ja aja formaatimine.
// Создать — закодировать
function encodeText() {
const text = "Tere, maailm!";
const encoded = Utilities.base64Encode(text);
Logger.log("Kodeeritud: " + encoded);
}

// Обновить — декодировать
function decodeText() {
const encoded = Utilities.base64Encode("Tere, maailm!");
const decoded = Utilities.base64Decode(encoded);
Logger.log("Dekodeeritud: " + Utilities.newBlob(decoded).getDataAsString());
}

// Форматировать дату
function formatDate() {
const now = new Date();
const formatted = Utilities.formatDate(now, "Europe/Tallinn", "dd.MM.yyyy HH:mm");
Logger.log("Kuupäev: " + formatted);
}

9. HtmlService
Kirjeldus: Võimaldab luua HTML-liideseid kasutajaga suhtlemiseks. Saab arendada kohandatud dialoogiaknaid ja külgpaneele.
// Создать диалог
function showDialog() {
const html = HtmlService.createHtmlOutput("<h2>Tere!</h2><p>See on dialoog.</p>");
SpreadsheetApp.getUi().showModalDialog(html, "Info");
}

// Обновить — показать боковую панель
function showSidebar() {
const html = HtmlService.createHtmlOutput("<p>Uuendatud sisu külgpaneelil.</p>");
SpreadsheetApp.getUi().showSidebar(html);
}

// Удалить — закрыть через JS
function closeDialog() {
const html = HtmlService.createHtmlOutput(
"<script>google.script.host.close();</script>"
);
SpreadsheetApp.getUi().showModalDialog(html, "Sulgen...");
}

10. ContactsApp
Kirjeldus: Võimaldab hallata kontakte Google Kontaktides. Saab luua, muuta ja kustutada kontakte.

Ошибка в Execution log!!!ContactsApp on Google poolt 2023. aastal eemaldatud (deprecated). Kood on kirjutatud ülesande näidise järgi, kuid käivitamisel annab vea ContactsApp is not defined.
Error: ContactsApp is not defined
11. Session
Kirjeldus: Annab teavet kasutaja praeguse seansi kohta, näiteks kasutaja e-posti aadressi või liidese keele.
// Получить email
function getUserEmail() {
const email = Session.getActiveUser().getEmail();
Logger.log("E-post: " + email);
}

// Получить язык
function getUserLocale() {
const locale = Session.getActiveUserLocale();
Logger.log("Keel: " + locale);
}

// Получить часовой пояс
function getTimeZone() {
const tz = Session.getScriptTimeZone();
Logger.log("Ajavöönd: " + tz);
}

