Ülesanne 8.4

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().

  1. Hankige viimase rea number:

const lastRow = sheet.getLastRow();

  1. 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

  1. 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.

  1. Valideerimine:
    if (!startDate || typeof daysToAdd !== ‘number’) return [“Andmeviga”];

Kui andmed on sobimatud, visatakse viga.

  1. 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:

  1. 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]

  1. Suurendage palka:
    if (roll === “Juht”) {
    return [roll, palk * 1.1];
    }

Suurendage 10% võrra.

  1. Kirjutage tulemus:
    range.setValues(updatedValues);

Enne:

Pärast:

3. Funktsioon generateOrderNotes:

Funktsioon loob tekstimärkme kolmest osast:

Klient

Hind

Märkme loomise aeg

  1. Malli string:
    const note = Klient: ${client} Hinna: ${price} Juhtimine: ${new Date().toLocaleTimeString()};
  2. 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.

  1. Konstruktor:
    constructor(sheet, rowIndex) {
    this.sheet = sheet;

this.rowIndex = rowIndex;

}

Salvestab:
sheet — lehe viide
rowIndex — rea number

  1. Palga saamine:
    getSalary() {
    return this.sheet.getRange(this.rowIndex, 4).getValue();

}

4 – veerg D.

  1. Palga määramine:
    setSalary(summa) {
    this.sheet.getRange(this.rowIndex, 4).setValue(summa);

}

  1. Rea värvimine:
    markHighlighted() {
    this.sheet.getRange(this.rowIndex, 1, 1, 5).setBackground(“#fff2cc”);
    }

Valib 5 veergu A-st E-ni.

  1. 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.

  1. Lisa rida lõppu:
    function appendLog(message, status = “INFO”, color = “white”)

Kui staatus puudub, on see INFO
Kui värv puudub, on see valge

  1. Lisa teine ​​rida lõppu:
    sheet.appendRow([timestamp, “”, status, message, “LOGI”]);

appendRow() lisab lõppu uue rea – kasulik logimiseks.

  1. Värvi rida:
    sheet.getRange(lastRow, 1, 1, 5).setBackground(color);

Kogu rida A–E on värvitud.

Enne:

Pärast:

6. Funktsioon setCalender:

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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: