Ma näitan teile, kuidas ma Ülesanne 8.4-s funktsioone lõin ja selgitan, kuidas need töötavad.
Esimene funktsioon calculateDeadlines:

See funktsioon kasutab Noolefunktsioone ja .map().
- Hankige viimase rea number:
const lastRow = sheet.getLastRow();
- Lugege vahemikku A2:B:
const range = sheet.getRange(2, 1, LastRow – 1, 2);
const data = range.getValues();
2, 1 – vahemiku algus (rida 2, veerg 1)
lastRow – 1 ridade arv
2 – veergude arv
- Andmete töötlemine:
const results = data.map(row => {
const startDate = new Date(row[0]);
const daysToAdd = row[1];
row[0] on kuupäev
row[1] on päevade arv
Apps Script tagastab mõnikord kuupäeva stringina; funktsioon kohandab seda vorminguga.
- Valideerimine:
if (!startDate || typeof daysToAdd !== ‘number’) return [“Andmeviga”];
Kui andmed on sobimatud, visatakse viga.
- Lõppkuupäevade arvutamine:
const endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + daysToAdd);
setDate() saab automaatselt liikuda järgmise kuu või aasta juurde.
Salvestamine tulemus:
sheet.getRange(2, 5, tulemused.length, 1).setValues(tulemused);
Enne:

Pärast:

2. Funktsioon updateSalaries:

- Funktsioon loeb:
C – rolli nimi
D – palk
Ja suurendab palka, kui roll = “Juht”.
Mis on destruktureerimine?
([roll, palk]) => { … }
See vorm võimaldab teil mugavalt rea massiivist väärtusi ekstraheerida ilma kirjutamata:
rida[0]
rida[1]
- Suurendage palka:
if (roll === “Juht”) {
return [roll, palk * 1.1];
}
Suurendage 10% võrra.
- Kirjutage tulemus:
range.setValues(updatedValues);
Enne:

Pärast:

3. Funktsioon generateOrderNotes:
Funktsioon loob tekstimärkme kolmest osast:
Klient
Hind
Märkme loomise aeg
- Malli string:
const note =Klient: ${client} Hinna: ${price} Juhtimine: ${new Date().toLocaleTimeString()}; - Teksti kirjutamine ühte veergu:
sheet.getRange(2, 5, notes.length, 1).setValues(notes);

Enne:

Pärast:

4. Funktsioon RowManager:

See on näide klassi kasutamisest.
- Konstruktor:
constructor(sheet, rowIndex) {
this.sheet = sheet;
this.rowIndex = rowIndex;
}
Salvestab:
sheet — lehe viide
rowIndex — rea number
- Palga saamine:
getSalary() {
return this.sheet.getRange(this.rowIndex, 4).getValue();
}
4 – veerg D.
- Palga määramine:
setSalary(summa) {
this.sheet.getRange(this.rowIndex, 4).setValue(summa);
}
- Rea värvimine:
markHighlighted() {
this.sheet.getRange(this.rowIndex, 1, 1, 5).setBackground(“#fff2cc”);
}
Valib 5 veergu A-st E-ni.
- Klassi kasutamise näide:
const manager = new RowManager(sheet, 5);
Loob objekti, mis haldab 5. rida.
Enne:

Pärast

5. Funktsioon appendLog():

Funktsioon lisab tabeli lõppu logi.
- Lisa rida lõppu:
function appendLog(message, status = “INFO”, color = “white”)
Kui staatus puudub, on see INFO
Kui värv puudub, on see valge
- Lisa teine rida lõppu:
sheet.appendRow([timestamp, “”, status, message, “LOGI”]);
appendRow() lisab lõppu uue rea – kasulik logimiseks.
- Värvi rida:
sheet.getRange(lastRow, 1, 1, 5).setBackground(color);
Kogu rida A–E on värvitud.
Enne:

Pärast:

6. Funktsioon setCalender:

- Loetava vahemiku määratlemine
Andmed on tabelis suurusega:
8 rida
5 veergu
alates lahtrist A1.
Selle määratlesin käsitsi:
const rowStart = 1;
const colStart = 1;
const rows = 8;
const cols = 5;
See tähendab, et loetav vahemik on A1:E8.
- Andmete lugemine tabelist
const data = sheet
.getRange(rowStart, colStart, rows, cols)
.getDisplayValues();
getRange(1, 1, 8, 5) tähendab:
start — rida 1, veerg 1 (A1)
võta 8 rida (1–8)
võta 5 veergu (A–E)
See tähendab, et loetakse lahter A1:E8.
- Miks kasutada funktsiooni getDisplayValues()?
getValues() tagastab sisemised andmed, samas kui getDisplayValues() kuvab need kasutajale.
Valisin funktsiooni getDisplayValues(), kuna tunniplaan sisaldab tavaliselt:
kuupäevi (tekstina)
kellaaegu (nt “08:15”)
klassi tüüpi
nime
õpetajat
Kõike seda on lihtsam stringidena kuvada.
- Andmestruktuur pärast lugemist
getDisplayValues() tagastab stringide massiivi:
[
[“01.02.2025”, “08:00”, “Loeng”, “Matemaatika”, “Mari”],
[“01.02.2025”, “10:00”, “Praktikum”, “Füüsika”, “Jüri”],
…
]
Iga sisemine element on tabelist üks rida.
- Andmete iteratsioon
Kasutasin andmete destruktureerimist:
data.forEach(([kuupäev, kellaaeg, tüüp, nimi, õpetaja]) => {
See tähendab:
Iga rea kohta, näiteks:
[“01.02.2025”, “08:00”, “Loeng”, “Matemaatika”, “Mari”]
Muutujad saavad järgmised väärtused:
kuupäev → “01.02.2025”
aeg → “08:00”
tüüp → “Loeng”
nimi → “Matemaatika”
õpetaja → “Mari”
Kui kirjutaksin selle ilma destruktureerimiseta, näeks see välja selline:
rida[0], rida[1], rida[2], rida[3], rida[4]
Destruktureerimisega on see palju selgem.
Tulemus:
