Descarga contenido exclusivo en
Ofimática y Programación + Tecnología

domingo, 10 de marzo de 2013



Google Apps Script: Redondear los decimales mostrados en un Label o TextBox


Los controles como Label o TextBox de GAS no tienen una propiedad visible donde se pueda establecer cuantos decimales queremos que se muestr... thumbnail 1 summary
Los controles como Label o TextBox de GAS no tienen una propiedad visible donde se pueda establecer cuantos decimales queremos que se muestren en el resultado de una operación. Por ejemplo si la operación es 10/3 con el siguiente código:

function doGet() {

  var app = UiApp.createApplication().setTitle('Estimación de ECT');
  var operacion = app.createLabel(10/3);
  app.add(operacion);
  
  app.close();
  return app;
}

veríamos lo siguiente al ejecutar la aplicación:




Si queremos, por ejemplo, mostrar solo 3 decimales modificamos el código como sigue:

function doGet() {

  var app = UiApp.createApplication().setTitle('Estimación de ECT');
  var operacion = app.createLabel(parseFloat(10/3).toFixed(3)); //definimos que se muestren solo 3 decimales
  app.add(operacion);
  
  app.close();
  return app;
}

y nos quedara como se ve en la imagen:



¡Bastante fácil!








Google Apps Script: Guardar columna de Google Hoja de Cálculo en variable Array.


Esto es algo que aprendí hace poco a pura prueba. Algunas veces he tenido la necesidad de guardar varios valores de una columna en una varia... thumbnail 1 summary
Esto es algo que aprendí hace poco a pura prueba. Algunas veces he tenido la necesidad de guardar varios valores de una columna en una variable Array en Google Apps Script, pero tener que acceder a cada momento a la Hoja de Cálculo para tomar los datos vuelve las aplicaciones lentas y es algo bastante molesto.

Para explicarme mejor, lo que hacia antes era, por ejemplo, algo como esto:


var hoja = SpreadsheetApp.openById("0AshRJMKOSRGddHNvSy10T2w5SzU3NT8g5hyj62XFrYXc").getSheetByName("Hoja1");
var Array_Rango =[hoja.getRange('A1').getValue(), hoja.getRange('A2').getValue(),......
                  ......,hoja.getRange('A100').getValue()];


Bueno al no ser un experto eso es lo que hacia, y volvía muy lentas mis aplicaciones al tener que acceder tanto a la Hoja de Cálculo. Esto lo he corregido usando el siguiente código en lugar del anterior:


var hoja = SpreadsheetApp.openById("0AshRJMKOSRGddHNvSy10T2w5SzU3NT8g5hyj62XFrYXc").getSheetByName("Hoja1");
var Array_Rango  =  new Array(100); //declaramos la variable como Array
Array_Rango = hoja.getRange(1, 1, 100, 1).getValues(); //guardamos los 100 valores del rango de una vez


con la última linea guardo los 100 valores en la variable Array de una vez. Tan grande es la mejora que en una aplicación donde tenia que guardar 800 valores en varias variables Array el tiempo de ejecución del código se redujo de 43 segundos, de espera para que se llenaran los Array, a solo 3 segundos de espera.

Espero les sea útil.