Añadir fila al final de spreadsheet con Google Apps Script


En muchas ocasiones necesitamos incluir datos al final de un spreadsheet, ya sea por que estamos copiando datos de un spreadsheet a otro o por que hemos de crear un log , solo por poner un par de ejemplos.

Hay muchas manera de hacerlo, primero os enseñaré la manera que usa todo el mundo cuando está empezando con Google Apps Script y después os enseñaré como hacerlo en una sola linea.

function IntroducirNuevaFilaV1()
{
   var data = ["Antiguo", "Hola","Que tal?" , 54 , 893.45 , "Tegucigalpa"];
 
   var out = new Array();
 
   out.push(data);
 
   var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
 
   var row = sheet.getLastRow()+1;
 
   sheet.getRange(row, 1, 1, data.length).setValues(out);
}

Las principales características de este código es que has de convertir el vector de datos en un Array de una sola fila dado que el setValues solo acepta arrays, no vectores. Además de esto hay el inconveniente que hemos de ir calculando cual es la ultima fila escrita hasta el momento.

En resumen, 5 lineas de código para hacer una cosa muy muy sencilla.

Como podríamos hacerlo más fácil ( y limpio, y fácil :) )... usando appendRow.

function IntroducirNuevaFilaV2()
{
   var data = ["Nuevo", "Hola","Que tal?" , 54 , 893.45 , "Tegucigalpa"];
 
   SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data").appendRow(data); 
}

Las ventajas son claras, una sola línea de código, clara y sencilla, sin tener que preocuparnos de convertir a Array ni de buscar cual es la última fila escrita.

Además, tiene la ventaja de ser un 15% más rápido. Por norma general, con esté código la V2 siempre ha tardado menos de 0,7 segundos a ejecutarse mientras que la V1 siempre ha tardado más de 0,7 segundos. Tal vez la diferencia no sea muy grande pero cuando tenemos un proyecto grande todo tiempo que ganemos es un tesoro.

Aquí tenéis un ejemplo de como queda el resultado:

Espero que quede claro como hacerlo para introducir nuevas filas en un spreadsheet. Ya veis que es fácil y claro.

No vaciléis en hacerme llegar vuestras dudas.

Nos vemos!

3 comentarios:

  1. Cómo podría hacer si quiero que la nueva información no reemplace a la antigua información que ya está en una fila?
    Lo que pasa es que al refrescar la hoja para obtener nuevos datos también refresca los datos anteriores y los reemplaza por el nuevo, yo no quiero que actualice la información anterior sino que solo agregue la nueva que se pueda obtener.

    ResponderEliminar
    Respuestas
    1. igual no te entiendo del todo. AppendRow te pone una fila nueva al final, no reemplaza nada. Te refieres a eso o era otra cosa? Explicamelo un poco más y te intento dar alguna solución.
      Nos vemos

      Eliminar
  2. Como podara hacer el mismo caso pero en vez de ser al final de la tabla siendo al principio -1 (Siendo la primera fila los encabezados).

    Tu blog es muy interesante.
    Muchas gracias de antemano.

    ResponderEliminar

Tal vez te interese