Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Escriure dades (o esborrar-ne) en un full de càlcul

Tenim la possibilitat d'escriure les dades afegint una filera o bé sobrescriure dades en les fileres ja existents.

Per afegir una filera farem servir la funció appendRow posant com a paràmetre un vector que conté les dades corresponents a les diverses caselles. Per exemple:

  var IdFull = "1j0IjAcf0BDppQuAOGZjLSjWY2_VYhgYeKg42bhQMk9Q"; // Identificador del full de càlcul 
  var numFull = 0;  // Número del full amb el que hem de treballar
  var camps = new Array(3);  // Contindrà tres valors per guardar a la taula
  camps[0] = valor1;
  camps[1] = valor2;
  camps[3] = valor3;
  var sh = SpreadsheetApp.openById(IdFull);  // Obre el full de càlcul
  var sheet = sh.getSheets();  // Agafa totes les pestanyes
  sheet[numFull].appendRow(camps);   // Afegeix una filera amb les dades 

També podem seleccionar el full pel seu nom, d'aquesta manera no ens afecta si es canvien d'ordre.

  var sh = SpreadsheetApp.openById(IdFull).getSheetByName("Llistat");  // Agafem el full
  var dades = sh.getDataRange().getValues();

Si, en canvi, volem sobrescriure en fileres ja existents farem servir la comanda setValues. Amb getRange definirem quines són les caselles que volem sobrescriure i amb setValues hi guardarem uns valors. Hi ha diverses possibilitats per a getRange, a la més general les caselles poden pertànyer a una o més fileres (mentre siguin consecutives) i abastar diverses columnes (que no cal que siguin totes), en aquest cas les dades s'han de disposar en format de matriu. La sintaxi és la següent:

  // El primer paràmetre és la filera on comença el grup
  // El segon paràmetre és la columna on comença el grup
  // El tercer paràmetre és el nombre de fileres que tindrà el grup
  // El quart paràmetre és el nombre de columnes que ocupa el grup
  var rangeVal = sheet[numFull].getRange(filaIni, colIni, numFiles, numCols);

A continuació tenim un exemple en el que escrivim a les dues primeres caselles de la darrera filera ocupada, excepte en cas que només hi hagi la filera de títols.

  var IdFull = "1j0IjAcf0BDppQuAOGZjLSjWY2_VYhgYeKg42bhQMk9Q"; // Identificador del full de càlcul 
  var numFull = 0;  // Número del full amb el que hem de treballar
  var camps = new Array(2);  // Valors per guardar a la taula
  camps[0] = valor1;
  camps[1] = valor2;
  // Ja tenim les dues caselles que hem d'escriure a la filera
  // Les nostres dades han d'escriure en un espai, que seleccionarem més endavant, 
  //    de dues columnes en una filera
  var valu = new Array(1);  // Matriu de dades a escriure
  valu[0] = camps;  // Converteix el vector en una matriu d'una filera i dues columnes
  var sh = SpreadsheetApp.openById(IdFull);  // Obre el full de càlcul
  var sheet = sh.getSheets();  // Agafa totes les pestanyes
  var rang = sheet[numFull].getLastRow();  // Darrera línia ocupada
  if (rang > 1){  // Mira si ja hi ha un valor (si és 1 només hi ha els títols)
    // La funció getRange ens permet seleccionar el grup de caselles sobre les que anem a escriure
    // El primer paràmetre és la filera on comença el grup, en el nostre cas la darrera escrita
    // El segon paràmetre és la columna on comença el grup, en el nostre exemple la primera (comencen en 1)
    // El tercer paràmetre és el nombre de fileres que tindrà el grup, per a nosaltres una
    // El quart paràmetre és el nombre de columnes que ocupa el grup, en el nostre cas dues
    var rangeVal = sheet[numFull].getRange(rang, 1, 1, 2);  // Selecciona dues caselles
    rangeVal.setValues(valu);  // Guarda els valors a les caselles, substituïnt els anteriors
  } else {
    // Si no n'hi ha cap, afegeix una fila amb la llista de dades en format matriu
    sheet[numFull].appendRow(camps);
  }

Si només volem escriure una casella, podem fer servir una versió més senzilla, com en el següent exemple:

  var IdFull = "1j0IjAcf0BDppQuAOGZjLSjWY2_VYhgYeKg42bhQMk9Q"; // Identificador del full de càlcul 
  var numFull = 0;  // Número del full amb el que hem de treballar
  var sh = SpreadsheetApp.openById(IdFull);  // Obre el full de càlcul
  var sheet = sh.getSheets();  // Agafa totes les pestanyes
  var rang = sheet[numFull].getLastRow();  // Darrera línia ocupada
  if (rang > 1){  // Mira si ja hi ha un valor (si és 1 només hi ha els títols)
    // La funció getRange ens permet seleccionar el grup de caselles sobre les que anem a escriure
    // El primer paràmetre és la filera on comença el grup, en el nostre cas la darrera escrita
    // El segon paràmetre és la columna on comença el grup, en el nostre exemple la primera
    var rangeVal = sheet[numFull].getRange(rang, 1);  // Selecciona la casella
    rangeVal.setValue(valor);  // Guarda el valor a la casella, substituïnt l'anterior
  } else {
    // Si no n'hi ha cap, afegeix una fila amb la llista de dades en format matriu
    sheet[numFull].appendRow([valor]);
  }

Per esborrar una filera tenim la funció següent:

  var IdFull = "1j0IjAcf0BDppQuAOGZjLSjWY2_VYhgYeKg42bhQMk9Q"; // Identificador del full de càlcul 
  var numFull = 0;  // Número del full amb el que hem de treballar
  var sh = SpreadsheetApp.openById(IdFull);  // Obre el full de càlcul
  var sheet = sh.getSheets();  // Agafa totes les pestanyes
  sheet[numFull].deleteRow(3);  // Esborra la filera 3
  }

També podem esborrar diverses fileres de cop:

  var IdFull = "1j0IjAcf0BDppQuAOGZjLSjWY2_VYhgYeKg42bhQMk9Q"; // Identificador del full de càlcul 
  var numFull = 0;  // Número del full amb el que hem de treballar
  var sh = SpreadsheetApp.openById(IdFull);  // Obre el full de càlcul
  var sheet = sh.getSheets();  // Agafa totes les pestanyes
  sheet[numFull].deleteRows(3, 4); // Esborra quatre fileres, començant per la 3
  }

Important:Les fileres i les columnes es comencen a comptar pel número 1. La filera 1 és la dels títols.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.