Ulesanne 8.4 Dmitri Pazekov

Tere tulemast Google Apps Scriptsi viie laheda funktsiooni juhendisse.

  • 1.Loob Google Sheetsi liidesesse uue menüü nimega “Funktsioonid”.
  • loob kena juhuslike arvude tabeli, värvib selle väärtusvahemiku järgi ja väljastab kõigi L1-s olevate arvude summa.
  • 2. loob ilusa lauakujunduse
  • Tabeli päis: paks, tsentreeritud, värvilise ja äärisega.
  • Veerud kohanduvad automaatselt andmetega.
  • 3. See funktsioon juhuslike nimede loendi genereerimiseks unikaalsete ID-dega
  • Luuakse 20 reaga tabel:
  • Veerg A — unikaalne ID (1 kuni 20)
  • Veerg B — juhuslik nimi loendist
  • 4. See funktsioon automaatne aruanne uuel lehel
  • Aruande pealkiri lisatakse.
  • Märgitakse praegune kuupäev ja kellaaeg.
  • Lisatakse juhuslik numbriline väärtus.
  • 5. See funktsioon teeb statistika minigraafikuga
  • Luuakse 15 juhusliku arvuga veerg pealkirjaga “Andmed”.
  • Nende andmete põhjal konstrueeritakse joondiagramm.
  • Graafik paigutatakse andmete kõrvale (veergu C).

1.osa

/**
 * Lisab eraldi menüü iga funktsiooni käivitamiseks.
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("Funktsioonid")
    .addItem("Funktsioon 1 – värviline maatriks", "funktsioon1")
    .addItem("Funktsioon 2 – tabeli automaatne vormindamine", "funktsioon2")
    .addItem("Funktsioon 3 – juhuslike nimede generaator", "funktsioon3")
    .addItem("Funktsioon 4 – aruande loomine uuele lehele", "funktsioon4")
    .addItem("Funktsioon 5 – statistika + graafik", "funktsioon5")
    .addToUi();
}

/**
 * FUNKTSIOON 1  
 * Genereerib 10×10 tabeli, värvib gradientidega ja lisab kokkuvõtte.
 */
function funktion1() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  const size = 10;
  let matrix = [];

  for (let r = 0; r < size; r++) {
    let row = [];
    for (let c = 0; c < size; c++) {
      row.push(Math.floor(Math.random() * 100));
    }
    matrix.push(row);
  }

  const range = sheet.getRange(1, 1, size, size);
  range.setValues(matrix);

  // Kaunid stiilid
  range.setFontFamily("Arial").setFontSize(11).setHorizontalAlignment("center");
  range.setBackgrounds(
    matrix.map(row =>
      row.map(value =>
        value > 80 ? "#ffb3b3" :
        value > 50 ? "#ffe680" :
        "#b3ffb3"
      )
    )
  );

  sheet.getRange("L1").setValue("Kokku: " + matrix.flat().reduce((a,b)=>a+b,0));
}

2.osa

/**
 * FUNKTSIOON 2 (UUENDATUD)
 * Professionaalne tabeli automaatne vormindamine:
 * - stiilne päis
 * - triibuline (zebra style) taust
 * - automaatne veergude suuruse kohandamine
 * - keskele joondamine
 * - numbrite iluvorming
 */
function funktion2() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const rows = range.getNumRows();
  const cols = range.getNumColumns();

  // Kaunis päis
  const header = sheet.getRange(1, 1, 1, cols);
  header
    .setFontSize(13)
    .setFontWeight("bold")
    .setHorizontalAlignment("center")
    .setBackground("#b7e1cd")        // pastel green
    .setBorder(true, true, true, true, true, true);

  // Triibuline taust (zebra pattern)
  for (let i = 2; i <= rows; i++) {
    const rowRange = sheet.getRange(i, 1, 1, cols);

    // paaris read – helehall
    if (i % 2 === 0) {
      rowRange.setBackground("#f2f2f2");
    } 
    // paaritud read – valge
    else {
      rowRange.setBackground("#ffffff");
    }
  }

  // Keskjoondus ja font
  range.setFontFamily("Calibri");
  range.setHorizontalAlignment("center");

  // Numbrite automaatne vormindamine
  for (let c = 1; c <= cols; c++) {
    const colRange = sheet.getRange(2, c, rows - 1, 1);
    colRange.setNumberFormat("#,##0.00"); // 2 kümnendit
  }

  // Ilusad raamid
  range.setBorder(true, true, true, true, false, false);

  // Automaatsed veerulaiused
  sheet.autoResizeColumns(1, cols);
}

3.osa

/**
 * FUNKTSIOON 3  
 * Loob juhuslike nimede nimekirja (20 tk) ja lisab unikaalsed ID-d.
 */
function funktion3() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  const names = ["Alex", "Mark", "Julia", "Eva", "Robert", "Kevin", "Laura", "Nina", "Marta", "Chris"];
  const output = [["ID", "Nimi"]];

  for (let i = 1; i <= 20; i++) {
    let randomName = names[Math.floor(Math.random() * names.length)];
    output.push([i, randomName]);
  }

  const range = sheet.getRange(1, 1, output.length, 2);
  range.setValues(output);
  range.setFontSize(12);

  sheet.getRange("A1:B1").setBackground("#cfe2f3").setFontWeight("bold");
}

4.osa

/**
 * FUNKTSIOON 4  
 * Loob automaatse aruande uuele lehele.
 */
function funktion4() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const report = ss.insertSheet("Aruanne " + new Date().toLocaleDateString());

  report.getRange("A1").setValue("Automaatne aruanne");
  report.getRange("A1").setFontSize(18).setFontWeight("bold");

  report.getRange("A3").setValue("Kuupäev:");
  report.getRange("B3").setValue(new Date().toLocaleString());

  report.getRange("A5").setValue("Juhuslik väärtus:");
  report.getRange("B5").setValue(Math.random().toFixed(4));

  report.autoResizeColumns(1, 5);
}

5.osa

/**
 * FUNKTSIOON 5  
 * Loob statistika + sisestab mini-graafiku.
 */
function funktion5() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  let values = [];
  for (let i = 1; i <= 15; i++) values.push([Math.floor(Math.random() * 100)]);

  const range = sheet.getRange(1, 1, 15, 1);
  range.setValues(values);
  sheet.getRange("A1").setFontWeight("bold").setValue("Andmed");

  // Loo graafik
  const chart = sheet.newChart()
    .setChartType(Charts.ChartType.LINE)
    .addRange(range)
    .setPosition(1, 3, 0, 0)
    .build();

  sheet.insertChart(chart);
}