Cómo obtener una fila entera con Google Apps Script


En muchas ocasiones podemos necesitar obtener los valores de una fila entera de un spreadsheet con Google Apps Script. Depende de en que situación nos encontremos podemos usar diferentes maneras para obtener dicha fila.

1. Básico
function GetRowData(row)
{
   var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 
   return sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
}
Este es el código más sencillo que existe para obtener un fila dentro de un spreadsheet.  Fijaos que después del getValues hacemos un [0] dado que el getValues SIEMPRE devolverá un array , no un vector.
La idea de este código no es muy diferente de la que os expliqué en su momento sobre como leer de un spreadsheet.

2. Hemos de obtener más de una fila
function GetAnyRowData(row)
{
   var data = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues();
 
   return data[row];
}
Este código está pensado para que una vez tengamos el data podamos seleccionar las filas que queramos. Extremadamente útil para buscar, filtrar o procesar grandes extensionses de datos.
A efectos prácticos este código es casi el mismo que os propuse en su momento cuando os expliqué como optimizar las lecturas de un spreadsheet

3. Hemos de obtener la respuesta de un Google Form
function onFormSubmit(e)
{
   var range  = e.range;
   var data = range.getValues()[0];
   Logger.log(data);
}
Igual que en el primer caso , hemos de hacer un [0] para obtener el primer vector dado que el getValues devuelve un array, no un vector.

Se ha de tener en cuenta que el primer elemento del vector es el timestamp de la respuesta.

Recordad que el onFormSubmit tendremos que setearle el trigger.

4. Hemos de obtener la fila donde alguien ha editado una celda.
function onEdit(e)
{
   var range = e.range;
   var row   = range.getRowIndex();
   var sheet = range.getSheet();
   var data  = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
   Logger.log(data);
}

Que hacemos para obtener una fila cuando alguien edita una celda? Obtener en el trigger de onEdit en que pagina estamos, en que fila estamos y con ello obtenemos la fila entera como en el primer caso.

No es necesario instalar el trigger para el onEdit dado que viene por defecto.

5. Hemos de obtener la fila introducida por un servicio externo
function onChange(e)
{
   var range = e.range;
   var row   = range.getRowIndex();
   var sheet = range.getSheet();
   var data  = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
   Logger.log(data);
}

Este código es prácticamente el mismo que para el onEdit pero tiene uso no cuando un usuario edita el spreadsheet o se produce un post de un formulario, sino cuando se produce una modificación en nuestro spreadsheet por otras causas (por ejemplo, otro script,Zapier u otros servicios)

Recordad que el onChange tendremos que setearle el trigger.

No soy capaz de ver más casos en que sea necesario obtener toda una fila de un spreadsheet, se os ocurre algún caso más? Ponedlo en los comentarios e intentaré montarlo.

Espero que os haya servido.

No vaciléis en hacerme llegar vuestras dudas.

Nos vemos

No hay comentarios:

Publicar un comentario

Tal vez te interese