Portfoolio

onEdit tõlkefunktsioon


Ü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äiustusKirjeldus
Mitu keeltLisati prantsuse, jaapani ja läti keel
MassiivKeeled on massiivina — lihtne lisada uusi
ValideerimineKontrollitakse, et lahter pole tühi ja on tekst
try/catchVead püütakse kinni, lahtrisse kirjutatakse “Viga!”
Visuaalne tagasisideVea 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);
}