Portfoolio

Google Apps Script

Mis on Apps Script?

Google Apps Script — tööriist Google Sheets’i automatiseerimiseks JavaScripti abil. Avatakse läbi Laiendused → Apps Script.

Ülesanne 1 + 2 — Tabeli loomine ja kujundamine

Funktsioon looTabelJaKM() — “Loo tabel + KM”
Puhastab ainult read A1:E6 (kirjeldus allpool jääb alles), loob päise ja 3 toodet, arvutab automaatselt hinna käibemaksuga (× 1.2).

// 1 Funktsioon andmete lisamiseks ja käibemaksu arvutamiseks
// 2 Tabeli kujundamine
function looTabelJaKM() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // getActiveSpreadsheet() — võtab aktiivse faili
  // getActiveSheet() — võtab aktiivse lehe

  sheet.getRange("A1:E6").clearContent(); // puhastab väärtused
  sheet.getRange("A1:E6").clearFormat();  // puhastab kujunduse

  // Päis: Nimetus, Hind, Hind käibemaksuga
  sheet.getRange("A1:C1").setValues([["Nimetus", "Hind", "Hind käibemaksuga"]]);

  // 3 toodet (ilma leib)
  var data = [
    ["piim",      1.2],
    ["kommid",    2.5],
    ["Coca-Cola", 1.0]
  ];

  // Arvutame käibemaksu (×1.2) ja lisame massiivi
  for (var i = 0; i < data.length; i++) {
    var km = data[i][1] * 1.2; // km = käibemaks
    data[i].push(km);
  }

  // Kirjutame andmed tabelisse (ainult veerud A:C)
  sheet.getRange(2, 1, data.length, 3).setValues(data);

  // 2 Kujundus: paks päis + raam
  sheet.getRange("A1:C1").setFontWeight("bold");
  sheet.getRange("A1:C" + (data.length + 1))
       .setBorder(true, true, true, true, true, true);
}

Põhimeetodid:

MeetodMida teeb
clearContent()Kustutab lahtrite väärtused
clearFormat()Kustutab kujunduse
setFontWeight("bold")Paks kiri
setBorder(...)Raam ümber tabeli
setValues()Kirjutab andmed lahtritesse

Ülesanne 3 — Andmete lisamine InputBox’i kaudu

Funktsioon lisaAndmed() — “Lisa andmed”
Küsib kasutajalt toote nime ja hinda. Kontrollib sisestust. Lisab ainult ridadesse 2–7 (maksimaalselt 3 uut toodet).

// 3 Andmete sisestamise funktsioon
function lisaAndmed() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Otsime viimast täidetud rida AINULT vahemikus 2–7
  // (et mitte haarata allpool olevat kirjeldust)
  var viimaneRida = 1;
  for (var i = 2; i <= 7; i++) {
    if (sheet.getRange(i, 1).getValue() !== "") {
      viimaneRida = i;
    }
  }

  // Kontrollime kas on ruumi (max 3 lisamist)
  if (viimaneRida >= 7) {
    Browser.msgBox("Tabel on täis! Maksimaalselt 3 lisamist.");
    return;
  }

  // Küsime kasutajalt andmeid
  var nimetus = Browser.inputBox("Sisesta toote nimi:");
  if (nimetus == "cancel") return; // kui vajutas Tühista

  var hind = parseFloat(Browser.inputBox("Sisesta hind:"));

  // Kontroll: kas sisestati number
  if (isNaN(hind)) {
    Browser.msgBox("Vigane hind!");
    return;
  }

  var km   = hind * 1.2;      // arvutame käibemaksu
  var rida = viimaneRida + 1; // järgmine vaba rida

  // Lisame uue rea
  sheet.getRange(rida, 1, 1, 3).setValues([[nimetus, hind, km]]);

  // Laiendame raami uuele reale
  sheet.getRange("A1:C" + rida)
       .setBorder(true, true, true, true, true, true);
}

Põhimeetodid:

MeetodMida teeb
Browser.inputBox()Dialoogiaken teksti sisestamiseks
Browser.msgBox()Dialoogiaken sõnumiga
parseFloat()Muudab teksti kümnendarvuks
isNaN()Kontrollib kas sisestati number

Ülesanne 4 — Laiendatud tabel (Kogus + Kokku)

Funktsioon lisaKogusJaKokku() — “Lisa kogus + kokku”
Lisab veerud Kogus (D) ja Kokku (E). Loob ripploendi 1–10. Rakendab ainult andmete ridadele (2–7), kirjeldust ei puuduta.

// 4 Laiendatud tabel - lisame Kogus ja Kokku veerud
function lisaKogusJaKokku() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Lisame uued veerupäised
  sheet.getRange("D1").setValue("Kogus");
  sheet.getRange("E1").setValue("Kokku");

  // Loome ripploendi reegli (1–10)
  var rule = SpreadsheetApp.newDataValidation()
    .requireValueInList(["1","2","3","4","5","6","7","8","9","10"])
    .setAllowInvalid(false) // keelab loendist väljas olevad väärtused
    .build();

  // Otsime viimast andmerea (ainult 2–7)
  var viimaneRida = 1;
  for (var i = 2; i <= 7; i++) {
    if (sheet.getRange(i, 1).getValue() !== "") {
      viimaneRida = i;
    }
  }

  // Rakendame ripploendi AINULT andmete ridadele
  sheet.getRange("D2:D" + viimaneRida).setDataValidation(rule);

  // Arvutame Kokku igale reale
  for (var i = 2; i <= viimaneRida; i++) {
    var hind  = sheet.getRange(i, 2).getValue(); // hind
    var kogus = sheet.getRange(i, 4).getValue(); // kogus

    // Kui tühi → vaikimisi 1
    if (kogus === "" || kogus == 0) {
      kogus = 1;
      sheet.getRange(i, 4).setValue(kogus);
    }

    sheet.getRange(i, 5).setValue(hind * kogus); // kokku
  }

  // Kujundus
  sheet.getRange("A1:E1").setFontWeight("bold");
  sheet.getRange("A1:E" + viimaneRida)
       .setBorder(true, true, true, true, true, true);
}

Põhimeetodid:

MeetodMida teeb
newDataValidation()Loob valideerimisreegli
requireValueInList()Ripploend väärtustega
setAllowInvalid(false)Lubab ainult loendis olevad väärtused
setDataValidation()Rakendab reegli vahemikule

Ülesanne 5 — Nupud ja menüü

Funktsioon onOpen() — automaatne trigger
Käivitub automaatselt faili avamisel. Loob kasutajamenüü Google Sheets’i ülemisse ribasse.

// 5 Nupud ja menüü
function onOpen() {
  var ui = SpreadsheetApp.getUi(); // võtame liidese
  ui.createMenu(" Minu skriptid") // "Minu skriptid"
    .addItem("Loo tabel + KM",     "looTabelJaKM")
    .addItem("Lisa andmed",        "lisaAndmed")
    .addItem("Lisa kogus + kokku", "lisaKogusJaKokku")
    .addItem("Puhasta tabel",      "puhastaTabel")
    .addToUi(); // lisame liidesesse
}

Nupud lisatakse läbi Sisesta → Joonis, seejärel paremklõps Määra skript → sisestatakse funktsiooni nimi.

Ülesanne 6 — Tabeli puhastamine + automaatne ümberarvutus

Funktsioon puhastaTabel() — “Puhasta tabel”
Puhastab read 2–8. Päis (rida 1) ja allpool olev kirjeldus jäävad puutumata.
Funktsioon onEdit() — reaalajas trigger
Käivitub automaatselt iga muudatuse korral. Kui muutub veerg D (Kogus) — arvutab Kokku automaatselt ümber.

// 6 Täiendav funktsioon (oma idee) - andmete kustutamine
function puhastaTabel() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Puhastame read 2–8 (andmed + lisatud read)
  // Kirjeldus allpool jääb alles!
  sheet.getRange("A2:E8").clearContent();

  // Taastame ripploendi D2:D8
  var rule = SpreadsheetApp.newDataValidation()
    .requireValueInList(["1","2","3","4","5","6","7","8","9","10"])
    .setAllowInvalid(false)
    .build();
  sheet.getRange("D2:D8").setDataValidation(rule);
}

// 4 + 6 Automaatne arvutus kui kogus muutub (onEdit trigger)
function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;

  // Kontrollime: kas muudeti veergu D (Kogus) real > 1
  if (range.getColumn() == 4 && range.getRow() > 1) {
    var row   = range.getRow();
    var hind  = sheet.getRange(row, 2).getValue(); // hind
    var kogus = sheet.getRange(row, 4).getValue(); // kogus

    if (kogus === "" || kogus == 0) kogus = 1;

    // Kirjutame Kokku automaatselt
    sheet.getRange(row, 5).setValue(hind * kogus);
  }
}