8.4. WordPress

Tere tulemast Google Apps Scriptsi viie laheda funktsiooni juhendisse.

Google Apps Script on võimas automatiseerimisplatvorm Google’i teenustele: Sheets, Calendar, Drive, Gmail ja palju muud.
Nüüd näitan teile Google Apps Scripti viit praktilist funktsiooni:

  • Tabeli muudatuste automaatne logimine
  • Sisestuse valideerimine e-posti teel
  • Google’i kalendri sündmuste loomine Sheetsi andmetest
  • Andmete salvestamine käivituste vahel
  • Päästikute ja käitlejate testimine

Keskkonna ettevalmistamine

  • Ava Google Sheets
  • Menüü → Laiendused (vt pilti 1)
  • Apps Script (vt pilti 2)

Ühe onEdit(e) käitleja loomine – onEdit on päästik, mis käivitub iga kord, kui lahtrit muudetakse.

  • Ühes projektis saab olla ainult üks onEdit, seega piisab selle ühekordsest kirjutamisest ja seejärel levitamisest ning saate seda ka käsitsi kontrollida, aga kuna meil on
function onEdit(e) {
  if (!e) return;

  logChanges(e); 
  validateEmail(e);
}

Kõikide muudatuste logimine (muudatuste ajalugu) – loome logilehe, kuhu iga muudatus salvestatakse:

  • Kuupäev ja kellaaeg
  • Kasutaja e-posti aadress
  • Lehe nimi
  • Lahtri aadress
  • Vanad ja uued väärtused
function logChanges(e) {
  const ss = e.source;
  const editedSheet = e.range.getSheet();
  const sheetName = editedSheet.getName();

  if (sheetName === 'Log') return;

  let logSheet = ss.getSheetByName('Log');
  if (!logSheet) {
    logSheet = ss.insertSheet('Log');
    logSheet.appendRow(['Timestamp', 'User', 'Sheet', 'Range', 'Old Value', 'New Value']);
    logSheet.setFrozenRows(1);
  }

  logSheet.appendRow([
    new Date(),
    e.user ? e.user.getEmail() : 'Unknown',
    sheetName,
    e.range.getA1Notation(),
    e.oldValue ?? '',
    e.value ?? ''
  ]);
}

Näide näeks välja selline:

Meiliaadressi valideerimine kontaktide lehel – iga kord, kui kasutaja sisestab kontaktide lehe B-veergu meiliaadressi, kontrollib skript selle õigsust.

function validateEmail(e) {
  const range = e.range;
  const sheet = range.getSheet();

  if (sheet.getName() !== "Contacts") return;
  if (range.getColumn() !== 2 || range.getRow() === 1) return;

  const email = (e.value || "").trim();
  const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

  if (!regex.test(email)) {
    range.setBackground("#ffcccc");
    range.setNote("erorror email");
  } else {
    range.setBackground(null);
    range.clearNote();
  }
}

Näide Vt 3

Impordi oma ajakava Google’i kalendrisse – loo kalendrisündmusi otse Google’i arvutustabelitest.

function importScheduleToCalendar() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Schedule');

  if (!sheet) throw new Error('list "Schedule" ei ole!');

  const rows = sheet.getDataRange().getValues();
  const calendar = CalendarApp.getDefaultCalendar();

  for (let i = 1; i < rows.length; i++) {
    const [eventName, dateStr, startTimeStr, endTimeStr, description] = rows[i];
    if (!eventName || !dateStr) continue;

    const start = new Date(`${dateStr} ${startTimeStr}`);
    const end =
      endTimeStr
        ? new Date(`${dateStr} ${endTimeStr}`)
        : new Date(start.getTime() + 60 * 60 * 1000);

    calendar.createEvent(eventName, start, end, { description });
    Utilities.sleep(30);
  }
}

Positsioonide hoidmine: Passilett

function incrementRunCount() {
  const props = PropertiesService.getScriptProperties();
  const count = Number(props.getProperty('runCount') || 0);
  props.setProperty('runCount', count + 1);
  Logger.log(`Скрипт запущен ${count + 1} раз`);
}

Näide (vt 5)