Como leer una hoja de calculo con Google Apps Scripts

Artículo perteneciente a la introducción de Google Apps Script

Una de las aplicaciones más usuales (y útiles) de GAS es poder obtener información de una hoja de cálculo que tengamos compartida en Drive.

Hay dos maneras de obtener la información de una hoja de cálculo de Drive:

- Leyendo casilla a casilla: Útil si hay poca información, extremadamente lento si hay mucha.
- Leyendo fila a fila : Bastante más rápido cuando el volumen de información es elevado dado que se hacen menos accesos a disco.

Dado que para mi la mejor manera de aprender es mediante los ejemplos, no os explicaré como se lee un fichero, os adjunto dos códigos muy sencillos e intentad entenderlo vosotros. Ambos hacen lo mismo, recogen todos los datos de una hoja de calculo y lo ponen dentro de un string (sin sentido por separado, pero con bastante utilidad si esta funcionalidad la tenemos en un código más grande).

Probad a copiar este código y ejecutar las funciones Lento y Rapido.

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    { name : "Lento",  functionName : "Lento"},
    { name : "Rapido",  functionName : "Rapido"}
 
  ];
  spreadsheet.addMenu("Lord Pakus Scripts", entries);
};

function Lento()
{
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var rows = sheet.getDataRange();
  var numCols = rows.getNumColumns();
  var numRows = rows.getNumRows();
  var string ="";

  for (var i = 0 ; i < numRows; ++i )
    for(var j = 0 ; j < numCols ; j++)
      string += sheet.getRange(i+1, j+1).getValue() + " ";
}


function Rapido()
{
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getActiveSheet();
    var rows = sheet.getDataRange();
    var values = rows.getValues();
    var numCols = rows.getNumColumns();
    var numRows = rows.getNumRows();
    var string ="";
 
    for(var i = 0 ;i < numRows ; ++i)
    {
      var row = values[i];
      for(var j = 0 ; j < numCols ; ++j)
      {
        string += row[j] + " ";
      }
    }
}

Cuánto más rápido? Cuánto más lento? Una forma fácil de verlo es mediante la opción de Ver->Transcripción de la Ejecución, que no hace más que un log de las cosas más importante de la ejecución y al final de todo dice cuanto ha tardado la última ejecución


Probad ambas funciones y mirad sus trazas de ejecución. Veréis que la función lenta tarda más y genera logs más extensos ( dado que tiene que hacer mas accesos a fichero ) mientras que la rápida hace un log mucho más discreto y los tiempos de ejecución son brutalmente mejores. Depende del tamaño de los datos que tengamos en esa hoja de cálculo, del número de filas y de columnas y de como están dispuestas, pero para tamaños medios-grandes de información podríamos hablar de mejores de rendimiento de x10 o x15, así que vale la pena que os acostumbréis desde el principio a leer ficheros de forma óptima.

Para cualquier duda ya sabéis que estoy a vuestra disposición.

Nos vemos

2 comentarios:

  1. Hola,
    tengo una cosa que realizar y no se como realizarla, te explico,
    por un lado mediante php obtengo los del formulario de contacto y guardo los datos del usuario en un sheet. por otro lado en google adwords cada 7 días o cada día realizare un reporte de click_performance_report, y lo metere en un sheet. Lo que quiero hacer es lo siguiente:

    Antes de volcar todo el reporte a la hoja de datos lo que quiero hacer es buscar el gclid del reporte buscarlo por el sheet del usuario que obtengo el gclid también, si el gclid del reporte es igual al gclid del cliente añado a esa fila los valores del reporte correspondiente al gclid del reporte, y así succesivamente.

    No se si me he explicado, no se como realizar la lectura de un cambo de un sheet y compararlo con otro campo de otro sheet y añadir los valores.

    Espero que puedas ayudarme.

    PD:gran aporte pero como ejecutas las funciones?

    Saludos

    ResponderEliminar
    Respuestas
    1. Desconozco lo que es el gclid así que no te puedo ayudar mucho, si me lo explicas intentaré echarte un cable.
      Las funciones se pueden ejecutar desde la ventana de código. Tal vez este link te pueda ayudar: http://googleappscriptsweb.blogspot.com.es/2015/02/hola-mundo-google-apps-script.html

      Eliminar

Related Posts Plugin for WordPress, Blogger...