Sari la conținut

Toate uneltele

Google Apps Script

Patru rețete scurte pentru Google Sheets. Copiază-le într-un proiect Apps Script legat de foaie și schimbă coloanele înainte să le rulezi.

Ghid: primii pași cu Apps Script

Meniu în foaie

Adaugă un meniu când se deschide foaia și rulează o funcție pe rândul selectat.

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Tools')
    .addItem('Process active row', 'processActiveRow')
    .addToUi();
}

function processActiveRow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveCell().getRow();
  if (row === 1) {
    throw new Error('Select a data row, not the header.');
  }
  SpreadsheetApp.getActive().toast('Row ' + row);
}

onOpen este un trigger simplu. Funcția din meniu poate cere autorizare când o rulezi prima dată.

Rândurile ca obiecte

Citește un sheet: primul rând este antet, restul devine o listă de obiecte. Rândurile goale sunt sărite.

function readSheetObjects(sheetName) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  if (!sheet) throw new Error('Sheet not found: ' + sheetName);
  var values = sheet.getDataRange().getValues();
  if (values.length < 2) return [];
  var headers = values[0].map(function (header) { return String(header).trim(); });
  var objects = [];
  for (var r = 1; r < values.length; r++) {
    var row = values[r];
    var blank = row.every(function (cell) { return String(cell).trim() === ''; });
    if (blank) continue;
    var item = {};
    for (var c = 0; c < headers.length; c++) {
      if (!headers[c]) continue;
      item[headers[c]] = row[c];
    }
    objects.push(item);
  }
  return objects;
}

Numele de coloane trebuie să fie unice. Celulele goale rămân șiruri goale.

Dată când se editează coloana B

Scrie data curentă în coloana E când cineva editează coloana B, sub antet.

function onEdit(e) {
  if (!e || !e.range) return;
  var range = e.range;
  if (range.getColumn() !== 2 || range.getRow() === 1) return;
  range.getSheet().getRange(range.getRow(), 5).setValue(new Date());
}

Este un trigger simplu: pornește la editarea din interfață, nu la modificările făcute de un alt script sau de API.

Email din rândul curent

Trimite un email folosind coloanele A (nume), B (email) și C (text) de pe rândul selectat.

function emailActiveRow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveCell().getRow();
  if (row === 1) throw new Error('Select a data row, not the header.');
  var values = sheet.getRange(row, 1, 1, 3).getValues()[0];
  var name = String(values[0] || '').trim();
  var email = String(values[1] || '').trim();
  var note = String(values[2] || '').trim();
  if (!email) throw new Error('Column B is empty.');
  MailApp.sendEmail({
    to: email,
    subject: 'Update',
    body: 'Hello ' + name + ',\n\n' + note + '\n'
  });
}

Apeleaz-o din meniu, nu din onEdit. MailApp cere autorizare și nu are voie într-un trigger simplu. Schimbă subiectul înainte de utilizare.