Professional Documents
Culture Documents
Classic
Archivo, Importar...
La manera ms prctica de levantar tablas es a travs del men Archivo, Importar... , que abre una ventanita de
opciones, preguntando dnde volcar los datos del archivo, y en cul es la estructura del archivo. Las estructuras
reconocidas son las ms usuales, en las que las columnas estn marcadas con un separador (que puede ser una coma,
un tabulador, o cualquier otro caracter elegido a tal efecto) y las filas separadas por salto de lnea.
Viene seleccionada la muy conveniente opcin "Detectar automticamente", que intenta descubrir el formato a partir de
un simple anlisis.
Cuando esto funciona, no vale la pena buscar alternativas. Pero cuando esto no funciona...
Complementos
Cuando lo anterior no funciona porque el archivo de texto contiene una estructura diferente, vale la pena buscar
complementos (Add-ons) especficos para esa estructura. Puede ser el caso de archivos XML.
Sin embargo a la fecha de este artculo no abundan los complementos para importar datos.
Obviamente, cada estructura particular requerir un algoritmo particular. Sin embargo todos tienen un primer paso en
comn: leer los datos del archivo de texto y volvarlos a una variable string. Esto se puede hacer de varias maneras, por
ejemplo:
especiales pueden cambiar. Para evitar este problema hay que cambiar la codificacin que usa la base de datos para
Classic
La nica alternativa que evita totalmente este problema es subir el archivo a Drive para procesarlo directamente sin
copiar y pegar.
Quizs la manera ms prctica y ms fcil para programar. La principal limitacin es el nmero de caracteres: 50.000.
Esto suele ser poco para grandes tablas. Este lmite no se puede superar, el nico camino para evitarlo es separar el
texto en partes menores a 50.000 caracteres. Esto requiere trabajo manual, y slo conviene para casos excepcionales:
tablas pequeas que rara vez superarn este lmite.
Alternativamente y mucho ms recomendable: usar rangos con nombre, en este caso la celda "entradaDeTexto"
Las secuencias de comando de mejor aspecto y ms fciles de usar son aqullas que utilizan paneles laterales
(sidebars), cuyo contenido se escribe en HTML y por lo tanto permite elegir tipos de letra, colores y hasta incluir
imgenes. Entre otras cosas, permite utilizar cuadros de texto.
Programar paneles requiere famliarizarse con la API HTML de GAS, adems de saber HTML, DOM y javascript.
Se pueden usar cualquier cuadro de texto, como INPUT, TEXTAREA o DIV contenteditable. En particular TEXTAREA
resulta conveniente porque facilita al usuario ajustar su tamao para ver mejor el contenido. Desde javascript sus
contenidos se leen con:
Luego hay que enviar el contenido a GAS usando la API de HTML [https://developers.google.com/apps-script/reference/html/]
.
[Ms sobre sidebars [https://developers.google.com/apps-script/guides/dialogs] ]
Esta es una alternativa peculiar, conveniente cuando interesa usar o conservar el texto en un Doc, por ejemplo para
hacerle retoques manuales, incluso de manera colaborativa, antes de procesarlo con GAS.
Hay muchas maneras de levantar el texto de un documento, la ms directa ejecutando desde una HCG es:
Hay que conocer el ID del documento. Alternativamente se puede usar openByUrl(docUrl) en lugar de openById
(docId).
buscar
Classic
La manera ms directa de abrir un archivo de texto subido a Drive es por medio de su Id:
DriveApp permite indicar la codificacin (charset) para que no se cambien los caracteres. Este argumento es opcional.
Si la codificacin no se conoce y ocasiona problemas, en lugar de getDataAsString se puede utilizar getBytes(), que en
lugar de una string devuelve un array de bytes con el contenido intacto, aunque ms complicado para manipular.
Esto significa que la conversin de archivos de textos grandes puede verse abortada. Lo primero que hay que saber es
que los GAS abortan de manera silenciosa, no se dispara ninguna funcin para guardar alguna variable de estado o
registro que indique por dnde iba el procesamiento cuando abort.
La primera recomendacin es ir volcando a la HCG los resultados a medida que se van obteniendo, en lugar de esperar
al final para hacerlo.
1. Dividir el trabajo en lotes pequeos. El tamao de los lotes se elije ms o menos en funcin a la experiencia y nada
ms. No hay nada cientfico para hacer al respecto.
2. Dejar registro frecuente del punto que se est procesando, para saber por dnde retomar luego de un aborto.
3. Alternativamente, iniciar con un algoritmo que analice los resultados de la HCG para determinar hasta dnde se
proces, y continuar desde lo que falta procesar.
La primera alternativa tiene el problema de elegir el tamao adecuado. La segunda agrega una tarea que enlentece
bastante la ejecucin de cada bloque. La tercera argega una tarea que enlentece el inicio de la ejecucin luego de un
aborto.
En todos los casos, esta limitacin requiere considerar la eficiencia del algoritmo. Una de las acciones ms lentas es la
de volcar o leer rangos en la HCG. Google recomienda leer o escribir un rango grande de una sola vez antes que leerlo
por partes en lecturas o escrituras consecutivas. Esto requiere una solucin de compromiso entre volcar los datos a la
HCG a medida que se obtienen o todos juntos al final.
En resumen
GAS permite automatizar algunas conversiones de archivo, pero no es lo ms adecuado para tablas grandes. Hacer
una secuencia que pueda retomar un trabajo inconcluso es una tarea de programacin avanzada, y antes conviene
tener algo de experiencia haciendo estas conversiones.
Mi sugerencia para quien quiera usar GAS para convertir archivo: que comience con archivos pequeos, o los divida
para procesar en lotes pequeos. Luego, con algo de experiencia en el tema, podr encarar un GAS que retome un lote
aboratado.
Comentarios y discusiones sobre este tema sern mejor tratados en la comunidad de Hojas de Clculo Google, en
castellano [https://plus.google.com/u/0/communities/117381564739239305447] .
0 Ver comentarios
Paneles personalizados con HTML en Hojas de clculo buscar
Google
Classic
Las Hojas de Clculo Google (HCG) tienen un mecanismo para crear interfaces de usuario altamente interactivas y
personalizadas, a travs de sus paneles laterales (sidebars). Estos paneles se disean en HTML y pueden contener
cdigo javascript, lo que los hace tan potentes como cualquier pgina web.
En este artculo, dirigido a usuarios familiarizados con Google Apps Script y mejor con algunos conocimientos bsicos
de HTML, pretendo acompaar al desarrollador en sus primeros pasos hacia el desarrollo de paneles con HTML.
Breve glosario
Si no ests familiarizado con la jerga, este diccionario te vendr bien:
HCG: Hoja de Clculo
Google
Script: secuencia de
comando (en castellano),
macro (en la jerga de Excel),
o cdigo
GAS: Google Apps Script,
lenguaje y entorno de
programacin de scripts para
HCG entre otros
HTML: lenguaje para disear [http://definicion.de/wp-content/uploads/2009/06/glosario.jpg]
pginas web
Tag: o etiqueta HTML, como <BODY>, <DIV>, <SPAN>, <IMG>
Atributo: parmetros de una etiqueta HTML, por ejemplo el atributo ID en una etiqueta A: <A ID="enlace">
Javascript: lenguaje de programacin de pginas web, idntico a Google Apps Script
Desarrollador: usuario que escribe el cdigo GAS, HTML y javascript de un panel
Qu es un panel?
Para que no haya equivocacin, algunas imgenes de una hoja de clculo con un panel lateral a la derecha:
[http://2.bp.blogspot.com/-ppR6O-
tOMw0/Uc0OZZpOIPI/AAAAAAAABC0/RWYz9KEw9RI/s1600/1Q1qtCNCtXW_Tw5lsRYzM8gLKvvaciGvwnXR85Q.png]
En esta imagen se ve el panel "Cursor inspector". El contenido HTML creado por el desarrollador es todo lo que est
debajo de la barra negra. En este caso se aprecian recuadros, tablas y cuadros de texto en los que el usuario puede
escribir.
buscar
Classic
Este otro ejemplo ilustra la posibilidad de agregar botones e imgenes, logrando un aspecto muy profesional.
Los paneles personalizados funcionan tanto en HCG, como en Docs y Formularios de Google. Si bien hay muchas
maneras de crearlos, en este artculo trataremos la ms moderna y con ms futuro.
[http://www.seismicthemes.com/wp-content/uploads/2012/08/wordpress-
theme-seo.jpg]
El editor de secuencias de comando (que se abre desde el men Herramientas) puede contener archivos GAS y
archivos HTML. En uno de estos ltimos se escribe el cdigo HTML de un panel, que se crea con el men Archivo,
Nuevo, Archivo HTML.
Google simplifica la tarea, omitiendo una serie de etiquetas habituales en las pginas web, pero innecesarias en los
paneles. Mientras una pgina web tpica luce como:
<html><head><style>...</style>...</head>
<body>...</body></html>
los archivos HTML de GAS se concentran en el contenido del body, omitiendo las etiquetas <html>, <head> y
<body>, pero permitiendo la etiqueta <style> . La estructura tpica de un panel es:
<style>...</style>
cdigo html
<script>...</script>
Ninguno de estos tags es obligatorio, pero se usarn en algunos ejemplos, y se analizarn uno a uno. Para poder
probar rpidamente los ejemplos:
function onOpen(){
SpreadsheetApp.getUi().createMenu('Mi panel')
.addItem('Mostrar panel', 'mostrarPanel')
.addToUi();
}
buscar
.showSidebar(
Classic
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
);
}
1. Actualizar la pgina con F5. Esto forzar la ejecucin de la funcin onOpen, que agrega el nuevo men.
2. Utilizar el men Mi panel, Mostrar panel . La primera vez no abrir el panel, sino que solicitar permisos de
ejecucin, que hay que aceptar para poder probar el cdigo.
En adelante, los ejemplos de cdigo HTML se pegan en el archivo panel.html, y se muestran con el men Mostar panel.
Etiqueta style
E
m
pi
e
z
o
p
or
el
la
p
[http://www.stickersmania.fr/1250-1671-large/sticker-tag-graffiti-style-100x160-cm-ref-2284-.jpg]
or
ser la primera, aunque sea la menos importante. En una pgina web esta etiqueta est en la seccin HEAD, pero los
paneles no tienen esa seccin, por lo que se acostumbra ubicar la etiqueta style al principio. Se puede omitir si no se
utiliza ningn estilo. Tpicamente los estilos se incluyen recin en las etapas finales de un desarrollo, por eso no es raro
que los paneles omitan la etiqueta style cuando estn todava en elaboracin.
Google facilita estilos propios para que sin esfuerzo los paneles se integren visualmente a la hoja de clculo. Estos
estilos se cargan con la siguiente lnea, que suele ser la primera de todas:
Recomendacin: utilizar esta lnea en todos los paneles, desde el principio del desarrollo, y luego agregar estilos
personalizados en la etiqueta style. Lo que no se recomienda es usar el atributo style, una prctica anticuada y
desalentada.
Cdigo HTML
Como en general los paneles
tienen cuadros de texto y tildes
para que el usuario escriba sus
datos y elija opciones, es una
prctica habitual utilizar etiquetas
INPUT, y por el mismo motivo es
usual encerrarlas en una etiqueta
FORM, aun sin la intencin de
enviar ningn formulario.
Por lo tanto, la estructura general para cada campo de la interfaz de usuario es la siguiente:
<form>
<div>
<div><label for="idDelCampoDeTexto">Ttulo para el campo de texto</label></div>
<div><input type="text" id="idDelCampoDeTexto" name="nombreDelCampoDeTexto"
value="texto predeterminado"></div>
</div>
<div>
<input type="checkbox" id="idDelCampoCheckbox" name="nombreDelCampoCheckbox" checked
value="noEsTanImportanteEnPaneles">
<label for="idDelCampoCheckbox">Descripcin del checkbox</label>
</div>
<div>
<input type="radio" id="idDelCampoRadio1" name="nombreDelCampoRadio" checked
value="noEsTanImportanteEnPaneles">
<label for="idDelCampoRadio1">Descripcin del radio 1</label>
</div>
<div>
<input type="radio" id="idDelCampoRadio2" name="nombreDelCampoRadio" checked
value="noEsTanImportanteEnPaneles">
<label for="idDelCampoRadio2">Descripcin del radio 2</label>
</div>
</form>
Copiando y pegando el cdigo verde en el archivo panel.html se podr ver cmo queda.
La etiqueta script
El cdigo html sirve para armar la interfaz de usuario, pero no har [http://team-blog.tripod.com/rtf2html-logo3-256x256.png]
nada sin su correspondiente cdigo javascript. Google recomienda
que el cdigo vaya al final del archivo HTML.
El cdigo javascript se ejecuta en el navegador, tiene acceso a los elementos HTML pero no tiene acceso a las API de
GAS. Para esto Google provee un puente: una manera de disparar la ejecucin de una funcin de GAS desde
javascript, de la siguiente manera:
buscar
Classic
Script, para ejecutarla en el servidor. La primera cuestin que hay que tener en cuenta es que la ejecucin es
asincrnica: miFuncionGas no devolver su resultado inmediatamente.
Si se espera un resultado de la funcin GAS, sta se obtendr como argumento de una funcin "listener", y la lnea
anterior se reescribe de la siguiente manera:
google.script.run.withSuccessHandler(receptor).miFuncionGAS(argumentos);
De este modo, la primer lnea dispara la ejecucin de miFuncionGAS(argumentos) en el servidor, y al terminar pasa
su resultado como argumento de la funcin receptor(resultado).
<script>
document.getElementById('boton').addEventListener('click', botonPulsado);
function botonPulsado(e){
google.script.run.withSuccessHandler(receptor)
.miFuncionGAS();
}
function receptor(resultado){...procesar el resultado de la funcin GAS...}
</script>
Este ejemplo a medias no funcionar si no se desarrolla el cdigo de la funcin receptor en panel.html, y la funcin
miFuncionGAS() completa en cdigo.gs
Historia
[http://imagecache2.allposters.com/IMAGES/KUN/4837.jpg]
Siempre preocup la seguridad de este tipo de servicios. El razonamiento de Google es el siguiente: "si vamos a
permitir que nuestros usuarios ejecuten en su navegador tanto cdigo HTML y javascript de desarrolladores
desconocidos, cmo asegurar que no sean malintencionados?"
Originalmente Google lanz su servicio UI (Interfaz de Usuario) para crear paneles y cuadros de dilogo, que permita
hacer lo mismo que se hace con HTML, pero de una manera mucho ms restrictiva.
Su proyecto "Caja" logr crear un "sandbox" (arenero, caja de arena), un entorno seguro para ejecutar HTML y
javascript lo suficientemente libre para crear interfaces de usuario, pero con todas las limitaciones necesarias para
impedir el uso malintencionado.
Caja evolucion y pas por tres etapas, cada una lograba ms libertad de uso y mayor velocidad de ejecucin. Cuando
qued claro que Caja poda brindar lo que se necesitaba, Google abandon y desalent su servicio UI.
En este momento el contenido HTML se puede mostrar en uno de tres modos de "sandbox" diferentes:
EMUL
ATED,
un
sandb
ox
buscar
muy
Classic
tible
con
naveg
adores
antigu
os
NATIV
[http://media.bestofmicro.com/R/Z/406655/original/sandbox.jpg]
E, un
sandbox ms rpido pero no tan compatible
IFRAME, un sandbox ms rpido todava y con menos restricciones, que slo funciona en los navegadores ms
avanzados. No funciona, por ejemplo, en Internet Explorer 9
Originalmente EMULATED fue el modo de sandbox por defecto. En 2014 el modo por defecto pas a ser NATIVE,
mucho mejor que EMULATED, mientras se comenz el desarrollo de IFRAME. Se puede suponer que en el futuro
IFRAME ser el modo por defecto.
Mientras tanto, conviene utilizar IFRAME, lo que requiere indicarlo expresamente como se observa en la funcin
mostrarPanel:
function mostrarPanel(){
SpreadsheetApp.getUi().showSidebar(
HtmlService.createHtmlOutputFromFile('panel')
.setTitle('Un ttulo para mi panel')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
);
}
Eplogo
Hay mucho ms para decir del
servicio HTML. A grandes rasgos:
Cuando sea posible elegir,
conviene procesar datos en
javascript en vez de GAS.
No hay una funcin en GAS
que permita disparar otra en
javascript.
Conviene obtener datos va
google.script.run en lugar de
usar TEMPLATES. [http://necesitodecirlo.ticoblogger.com/files/2014/09/lapida2yt.jpg]
google.script.host tiene mtodos para, por ejemplo, cerrar el panel.
Se pueden mostrar imgenes en un panel usando el tag IMG y su url, pero no se pueden tener archivos de
imgenes en el proyecto de una hoja de clculo.
Google recomienda usar jQuery
No dejes de comentar y compartir tu experiencia en la comunidad de Hojas de Clculo Google
[https://plus.google.com/u/0/communities/117381564739239305447] .
Bonu
s
Si vas a
escribir
[http://www.voiceofcoaches.com/wp-content/uploads/2013/04/bonus-icon3-300x225.jpg]
en html,
te recomiendo asignarle el atributo id a los elementos que vayas a acceder con javascript. La manera tradicional de
crear una variable para un elemento con id es:
Sin embargo, te recomiendo el siguiente cdigo que recorre todo el html y te genera una variable para cada elemento
con id. Para facilitar las cosas, la variable tiene el mismo nombre del atributo id:
var elemento, i, elementos = document.querySelectorAll('*[id]');
buscar
Classic
O de manera ms compacta:
for(i=(e=document.querySelectorAll('*[id]')).length; i-->0;)
window[e[i].id]=e[i];
Referencias
En ingls:
API HTML para GAS [https://developers.google.com/apps-script/reference/html/?hl=es-ES]
Introduccin a sidebars con HTML [https://developers.google.com/apps-script/guides/dialogs?hl=es-ES]
Opciones para type en la etiqueta input [http://www.w3schools.com/html/html_form_input_types.asp]
Ejemplo de cdigo para el archivo html [https://developers.google.com/apps-script/quickstart/docs.html.txt?hl=es-ES]
Cdigo completo de un complemento que usa un panel [https://developers.google.com/apps-script/quickstart/docs?hl=es-
ES]
3 Ver comentarios
[https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fp1.pkcdn.com%2Fcodigo-digital-de-
programa_307497.jpg&container=blogger&gadget=a&rewriteMime=image%2F*]
[https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?
url=http%3A%2F%2Fp1.pkcdn.com%2Fcodigo-digital-de-
programa_307497.jpg&container=blogger&gadget=a&rewriteMime=image%2F*]
Las Hojas de Clculo Google permiten escribir y ejecutar "macros" o secuencias de comando (o scripts), pero adems
permiten escribir funciones personalizadas para ser llamadas desde las frmulas en las celdas. En este artculo
exploramos sus posibilidades y limitaciones.
[http://mpe-s2-p.mlstatic.com/binoculares-largavistas-
profesionales-10x-70-x-70-con-zoom-15545-MPE20105312798_052014-F.jpg]
Qu hay en este artculo?
A continuacin veremos:
Maysculas y minsculas en los nombres de las funciones
buscar
puede saltearse algunas partes debidamente sealadas, incluso puede saltearse el artculo entero e ir a jugar al Candy
Crush.
Breve glosario
Si no ests familiarizado con la jerga, este diccionario te vendr bien:
HCG: Hoja de Clculo Google
Script: secuencia de comando (en castellano) o macro (en la jerga de Excel)
GAS: Google Apps Script, lenguaje y entorno de programacin de scripts para HCG entre otros
Frmula: la que determina el valor de una celda en una HCG
Funcin de HCG: funciones para ser usadas en frmulas
Funcin de GAS: algoritmo que se puede llamar desde otra parte de las secuencias de comando
Array: matriz
El men Herramientas, Editor de secuencias de comando... abre la herramienta "editor de secuencias de comando".
En este sentido, es muy coherente.
function DUPLICAR(valor
) { [http://upload.wikimedia.org/wikipedia/en/f/f2/Google_Apps_Script.png]
return valor * 2;
}
Guardar y listo, hemos escrito la funcin de GAS duplicar(valor) ya est lista para usar en las frmulas. En cualquier
celda de la HCG ingresar la siguiente frmula:
=DUPLICAR(7)
Mientras GAS hace distincin de maysculas y minsculas, de manera que "duplicar", "Duplicar" y "DUPLICAR" son tres
funciones distintas, las frmulas de HCG no hacen tal distincin, y esas tres maneras hacen referencia a una nica
funcin.
=DUPLICAR(7)
buscar
=duplicar(7)
Classic
Cabe preguntarse: "si se definen las funciones DUPLICAR y duplicar cul se invoca desde las frmulas?"
Respuesta prctica: para qu quers definir dos funciones con el mismo nombre?
Respuesta tcnica: se invoca la ltima en ser definida, la que est ms abajo en el cdigo, pues sta redefine y
sobreescribe a la anterior.
Tipos de valores
Las funciones [http://4.bp.blogspot.com/-WJ8Pmady8jo/T_G4Y_qlneI/AAAAAAAAAc8/fZJkSuoNVdg/s1600/developpers.jpg]
reciben argumentos
y devuelven un nico valor. Las funciones personalizadas manejan los siguientes tipos:
number para valores numricos
string para textos
boolean para booleanos (TRUE y FALSE)
Date para fechas
Array para matrices
Si el rango es de una sola celda, por ejemplo DUPLICAR(A1), la HCG pasa el valor de esa celda como argumento.
Si el rango tiene varias celdas, la HCG pasa un Array de dos dimensiones con los valores de todas las celdas del rango.
Incluso cuando el rango es unidimensional, como por ejemplo el rango A:A. La matriz pasada tendr siempre dos
dimensiones: un vector de filas, siendo cada fila un vector de valores de cada celda.
[http://www.osenseis.com/wp-content/uploads/2014/10/El-pelot%C3%B3n-de-los-torpes-
300x300.jpg]
Por ejemplo, suponiendo que cada celda contiene su propio nombre (la celda A1 contiene "A1"), en GAS el rango A1:A3
produce la siguiente matriz:
y el rango A1:C1:
[["A1", "B1", "C1"]]
buscar
No hay manera de pasar un argumento del tipo Range. No hay manera de descubrir cul es el rango del argumento.
Classic
[http://www.rdiplastics.com/wp-
content/uploads/moldes-3.jpg]
Matrices como argumentos
HCG permite escribir matrices en sus frmulas. Los rangos no son la nica manera de proporcionar una matriz de
valores. Tambin se pueden escribir "literalmente", como en el siguiente ejemplo:
=SUM({2; 3; 5; 7; 11;13})
Notar que la sintaxis de GAS es diferente a la de las frmulas de HCG. En GAS (como en javascript) las matrices o
arrays se escriben con corchetes en lugar de llaves y coma en lugar de punto y coma. Por ejemplo,
[http://www.rdiplastics.com/wp-content/uploads/moldes-3.jpg]
Se trata de un caso especial conocido en HCG como "funcin matricial", y no es especfico de GAS. La funcin de HCG
IMPORTRANGE es un ejemplo de funcin matricial.
Cuando la
matriz
resultante
de una
frmula
sea un
vector
(una
matriz de
una sola
dimensin
[http://files.climaorganizacional9.webnode.mx/200000567-dc3c8dd37b/resultados.jpg]
), sus
valores se extendern a las celdas hacia abajo, tantas celdas como valores haya.
Cuando la matriz tenga dos dimensiones, se desplegar hacia la derecha y hacia abajo.
buscar
Classic
[http://1.bp.blogspot.com/_Rdr2fyjWN00/TDNIXLWL-
gI/AAAAAAAAAQY/xX6rNsTo7ds/s1600/fecha+y+hora.png]
En HCG las fechas son solamente un formato de representacin de valores numricos. Sin embargo, las
funciones en GAS las representan diferente. La HCG convierte un valor numrico en fecha cuando el
formato de celda de ese valor es de fecha. Simple no?
Como no es posible introducir una fecha de forma literal en una frmula (1/1/14 se calcula como dos
divisiones y resulta en un catorceavo en lugar de una fecha), la nica manera que conozco de pasar
fechas como argumentos es por referencia a una celda que contenga una fecha.
El objeto Date no es trivial y puede prestarse a confusin. Si hay que usarlo en clculos en GAS,
conviene leer la definicin del objeto [https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Global_Objects/Date] y practicar bastante.
A modo de resumen, es mala idea pretender que una funcin llamada desde una frmula modifique el
valor de alguna otra celda. Ya ests prevenido. Ahora s, a los bifes:
Las funciones escritas en GAS disponen de todas las API de Google y de todas las funciones propias de
javascript, pero no tienen modo de invocar funciones de HCG. Por ejemplo, en una funcin de GAS no
se puede usar VLOOKUP: esa funcin no existe en GAS. Se puede programar una funcin que realice lo
mismo, pero se es otro cantar.
Por otro lado, cuando las funciones de GAS se invocan desde frmulas en celdas, tienen muchas ms
restricciones que si fueran ejecutadas desde un men como una macro normal, y se resumen del
siguiente modo:
En los dos primeros casos la frmula arroja un error bastante elocuente como ste:
En el caso 4 la celda mostrar la leyenda "Loading..." para siempre. Un mensaje que desafa la intuicin.
-PhoReA3PQ60/TfpjQPKY9SI/AAAAAAAAAVo/fI8KUUHLttQ/s1600/Modelo+por+Atractor+extra%25C3%25B1o.jpg]
Una funcin GAS no es determinstica cuando su resultado es afectado por valores cambiantes en su
algoritmo que no dependen de los argumentos, como por ejemplo,
El ltimo caso es muy frecuente, cuando la funcin toma valores de rangos por sus propios medios en
lugar de recibirlos como argumentos.
Recalculando...
buscar
Classic
[http://px.fotos.cdn.0223.com.ar/f/c5ec404a-1457-4782-a9f6-
c1ea0526009f/imgTapa.jpg]
HCG tiene un algoritmo avanzado de reclculo, que para ser ms rpido evita recalcular las celdas cuyos
valores no cambian. En rigor, si los argumentos de una funcin determinstica no cambiaron, no hace
falta recalcular la funcin.
HCG asume que las funciones GAS son determinsticas, y por lo tanto no las volver a evaluar mientras
no cambie el valor de ninguno de sus argumentos, incluso cuando se recalculan otras celdas de la HCG.
Autocompletar
Las funciones personalizadas soportan autocompletado, de manera que el usuario obtenga ayuda sobre
la sintaxis (por ejemplo los tipos de datos para cada argumento) mientras escribe la funcin en una celda.
Para eso hay que indicarle a GAS de qu tipo es cada argumento, lo que se hace dentro de
comentarios, como en este ejemplo:
/**
* @customfunction
*/
function DOUBLE(input) {
return input * 2;
Tcnicamente, GAS implementa JDoc, que es una manera de documentar javascript. JDoc usa palabras clave luego
del @ , como @param o @return , dentro de un comentario multilnea inmediatamente antes de la definicin de la funcin.
GAS requiere la clusula @customfunction para usar esta informacin a la hora de autcompletar.
{number}
{string}
{Date}
Hay mucho ms en JDoc [http://usejsdoc.org/tags-param.html] , pero hay que tener en cuenta que ese sitio se refiere a javascript,
y no especficamente a GAS.
buscar
Classic
ww.techinsights.com/uploadedImages/Public_Website/Content_-_Primary/Teardowncom/Sample_Reports/sample-
Ejemplos prcticos
Un poco de cdigo de ejemplo, que le puede servir a ms de uno:
[http://juandesoladotorg.files.wordpress.com/2011/03/referencias.gif]
Referencias
La comunidad de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447] en
castellano
Curso de javascript [http://www.codecademy.com/tracks/javascript] en castellano
API de Hojas de Clculo Google [https://developers.google.com/apps-script/reference/spreadsheet/?hl=es-ES] (en ingls)
Funciones personalizadas en HCG [https://developers.google.com/apps-script/guides/sheets/functions?hl=es-ES] (en
ingls)
Frmulas matriciales [https://support.google.com/docs/answer/3093275?hl=es] en castellano
Certificado de lectura
Si necesits un certificado de lectura de este artculo, copi lo siguiente en un editor de texto (incluyendo la firma),
buscar
La Comunidad Castellana de Hojas de Clculo Google certifica que (tu nombre ac) ha llegado al final del artculo
Classic
Ver comentarios
7th July 2014 Google Apps Script: algo ms que un lenguaje de macros
Google Apps Script es el lenguaje de "macros", "secuencias de comando" o "scripts" de Google Docs. Si bien este
lenguaje es popularmente conocido por ser utilizado para macros de hojas de clculo Google, su alcance va mucho ms
all.
Google Apps Script (conocido tambin como GAS, por sus iniciales) es el primer lenguaje de computacin en la nube
accesible para usuarios de forma masiva. El hecho de ser el primero signific que no haba modelo a seguir, Google
tuvo que ir probando diferentes formas de usar este lenguaje, recorriendo un camino de prueba y error continuos.
Quienes siguen este lenguaje desde sus inicios, han visto crecer su potencial a travs de nuevas API experimentales, la
mitad de las cuales se "graduaban" para convertirse en parte de la API estable y definitiva de GAS. La otra mitad mora
con la tenebrosa leyenda "deprecated".
A lo largo de su desarrollo Google ha intentado diferentes enfoques, y entre 2013 y 2014 decidi darle forma definitiva
(quin sabe cunto tiempo significa "definitiva"), reordenando su documentacin e introduciendo un nuevo modelo de
conceptos para este lenguaje.
Hoy GAS es mucho ms que un lenguaje de macros, y su amplitud puede confundir al programador que decide explorar
funciones avanzadas.
Hay varios tipos de scripts, que se diferencian por la manera en que sern ejecutados. Cada tipo de script tiene una
determinada capacidad en cuanto a qu APIs puede utilizar, y a qu datos privados puede acceder. Es vital tener en
claro cules son estos tipos de scripts, esto permitir comprender qu cosas se pueden hacer y cmo, y qu cosas no
se pueden hacer, antes de empezar a hacerlas.
Para ir despacio de lo general a lo particular, conviene separar los scripts en dos grandes categoras:
Container-bound , o atado a un documento contenedor: son los scripts que se ejecutan dentro de una hoja de
clculo Google, un Doc, un Form, (el contenedor). Un ejemplo son los menes personalizados.
Web apps, son scripts atados a una direccin web, independientes de cualquier documento Google. Sirven para
generar pginas web dinmicas, o gadgets para Google Sites.
Claramente, el programador de macros desarrolla script "container-bound", y muchas veces desconoce las posibilidades
que brindan las web apps.
buscar
Classic
Macros
La mayora de los tutoriales ensean a crear macros para una hoja de clculo, y por eso es el tipo de script ms
conocido. Estos scripts ejecutan la funcin onOpen sin privilegios. Luego, cuando el usuario elige ejecutar el script, por
ejemplo a travs de un men creado por la funcin onOpen, GAS solicitar un permiso que el usuario puede aceptar por
nica vez. A partir de entonces, el script se ejecuta con los privilegios del usuario: puede acceder a los documentos del
usuario y conocer su direccin de email.
Las macros ms avanzadas pueden crear una interfaz de usuario HTML en un panel lateral, con botones y cuadros de
texto.
Google dispone de una Galera de secuencias de comando (script gallery) que permite al usuario instalar en su
documento un script desarrollado por un tercero. En la prctica, esta galera no dio resultado, no fue adoptada por el
pblico en general, lo que dio lugar a una nueva estrategia de distribucin de scripts: los Complementos.
Complementos (Add-on)
Los "complementos" (add-on en ingls) son scripts similares a las macros, con la diferencia que no son propios de un
nico documento. Luego de que el usuario instala un complemento, este script se ejecuta en todos los documentos que
abre el usuario, tpicamente presentando un submen propio en el men Complementos.
De manera similar a las macros, los complementos ejecutan su funcin onOpen sin privilegios (no pueden acceder a
informacin personal del usuario), hasta que el usuario utiliza el complemento a travs de su men. Con esa accin el
usuario habilita al script a ejecutarse con privilegios en el documento.
Los complementos se obtienen desde el men Complementos, y se instalan de una vez para todos los documentos.
sta es la principal diferencia con las macros, que estn asociadas a un nico documento.
Al momento de escribir este blog, los desarrolladores no pueden publicar libremente sus complementos: esta funcin se
encuentra en etapa de prelanzamiento, y por motivos de seguridad su publicacin no es automtica, sino que est
sujeta a una revisin previa.
Se trata de un tipo muy especfico de script: son funciones escritas para ser usadas en frmulas, dentro de celdas de
una hoja de clculo. Estas funciones se ejecutan en un entorno muy limitado, y apenas pueden calcular un resultado a
partir de sus argumentos.
Estas funciones no pueden "hacer" cosas, ms all de calcular un resultado. No pueden cambiar el nombre de una
hoja, ni crear un men, ni mover el cursor. Se ejecutan sin privilegios, como "annimos".
El modelo de GAS asigna un tipo propio a estas funciones, spreadsheet custom functions
[https://developers.google.com/apps-script/execution_custom_functions?hl=es-ES] .
Web apps
Las web apps son una categora de scripts totalmente diferente a los container-bounds: no estn incluidas en ningn
documento "contenedor"; en su lugar se acceden a travs de una direccin web propia (una url). Adems, mientras
aqullas se ejecutan exclusivamente con los privilegios del usuario que las utiliza, las Web apps pueden ejecutarse con
esos privilegios, o con los del desarrollador.
Classic
Web app
El script se ejecuta cuando el navegador accede a su url. As como al abrir un documento se ejecuta la funcin onOpen,
en el caso de las Web app se ejecuta la funcin doGet o doPost, segn el navegador est realizando un GET o un
POST. Para el que no est familiarizado con esta jerga, cuando el usuario escribe una url en la barra de direcciones, el
navegador realiza un GET.
GAS dispone de la API HTML Services para crear pginas web, estticas o dinmicas. Como su nombre lo indica, las
web app permiten desarrollar aplicaciones web.
Content Service
Es el nombre que se le da a una web app que, en lugar de implementar una interfaz web para el usuario, se limita a
proveer datos en formatos diferentes al HTML: XML, JSON, JSONP, texto, etc.
Su propsito no es atender una solicitud del usuario, sino proporcionar informacin a consultas automticas del tipo
AJAX realizadas por otras pginas web. AJAX tiene limitaciones a la hora de solicitar datos a servidores de otros
dominios, por ese motivo los content services se utilizan mucho la tcnica JSONP.
Se trata de una web app con una especificacin adicional para que pueda ser incorporada como gadget dentro de una
pgina de Google Sites.
4 Ver comentarios
Con el prximo lanzamiento de la nueva versin de Hojas de Clculo Google (HCG), cuya beta est disponible desde
Diciembre de 2013, se cierra un captulo en el desarrollo de esta magnfica aplicacin. En este artculo intento poner en
perspectiva los cambios que sufrieron las HCG desde su lanzamiento, para especular sobre su futura evolucin.
La versin original
A mediados de 2009 Google lanz sus HCG al pblico, pero solamente dentro de Google Apps. Ms adelante las
agreg a las cuentas regulares de GMail, dej de hablar de "cuentas de GMail" para denominarlas "cuentas de Google",
donde GMail sera ser slo un producto ms de una creciente coleccin.
Classic
[https://st.fl.ru/users/gi/gi0235/upload/f_57451b33d8944dce.png]
En este momento las HCG usaban el estilo de men "Ribbon", que haba sido recientemente introducido en Microsoft
Office para Vista. Las tres barras de botones Format, Sort y Formulas agrupaban todos los comandos de la hoja de
clculo.
Desde siempre, pequeos cambios se fueron introduciendo en la interfaz, de manera suave, sin que eso signifique un
cambio de versin para el usuario. El men File se incorpor a la izquierda:
buscar
Classic
[http://cdn1.chillnite.com/wp-content/uploads/2007/04/google_spreadsheet_big.jpg]
La proliferacin de comandos hizo que Google replanteara su interfaz "Ribbon" y la sustituyera por una barra de menes
y una barra de botones, adoptando la funcionalidad de las hojas de clculo ms antiguas, pero con un aspecto mejorado
y ms limpio.
buscar
Classic
[http://1.bp.blogspot.com/_ZaGO7GjCqAI/SOnAq6IqYcI/AAAAAAAAL8k/vxOpHY5I_OQ/s640/google-spreadsheets-oct08.png]
Igual que antes, se fueron haciendo retoques menores, agregando nuevas funciones, y cambiando levemente el
aspecto:
[http://techmngtsolutions.files.wordpress.com/2010/05/tst_googledocs.jpg]
buscar
Classic
[http://i.i.cbsi.com/cnwk.1d/i/tim//2010/04/09/spreadsheet_collab_610x450.png]
A esta versin se la recuerda tambin por haber ordenado las pestaas inferiores, que dejaban de ser enlaces
rudimentarios, y ahora admitan ser arrastrados. Si bien era la versin ms compleja hasta ese momento, tambin fue
la ms intuitiva y fcil de usar.
Un dato curioso: a los desarrolladores se les haba terminado la lista de cosas de Excel que haba que imitar. Luego de
este lanzamiento, "nos" pidieron relevar las funciones ms solicitadas por el pblico en general. Y como resultado de
esta encuesta, en sucesivas mejoras, incorporaron por ejemplo la posibilidad de boquear celdas individuales. Excel
haba dejado de ser el modelo a seguir, en 2012 las HCG empezaban a hacer su propio camino al andar.
La ltima versin
Visto en perspectiva, la versin 2014 (en beta al momento de este artculo) no presenta innovaciones espectaculares ni
cambios dramticos como las anteriores. La interfaz est apenas retocada. En este caso los desarrolladores trabajaron
duro hacia adentro, en el "motor" de clculo, y con mucho esfuerzo lograron dar respuesta a un antiguo reclamo: que se
pueda modificar una HCG sin conexin a Internet.
Desde el comienzo las HCG realizaban los clculos de las celdas en los servidores de Google. No importaba la
potencia de tu PC, el reclculo demoraba siempre lo mismo. Y el motivo de esto era simple y contundente: las HCG (as
como todo el conjunto de Google Docs) deban funcionar en mviles, en cualquier hardware, por poco potente que
pudieran ser. La idea era poder usar una HCG en un celular, sin limitaciones.
En este contexto, no tena sentido encarar el esfuerzo de migrar el motor de clculo al navegador. Pero algo cambi en
Google, algo que no pareca muy relacionado con las HCG.
Durante aos Google intent poner en el mercado el concepto de Chromebook, una notebook barata para navegar en
Internet. El principal problema fue que era intil cuando no haba Internet. 2013 fue el ao del segundo relanzamiento
de las Chromebooks, ahora s con toda la fuerza, y Google Docs aportara su granito de arena con una versin "sin
conexin" para todos sus servicios. Lgicamente, hacer funcionar las HCG sin conexin fue la parte ms difcil, y la
ltima en llegar.
buscar
manera de poner el tilde de "cumplido" a un objetivo interno de Google que les iba de las manos.
Classic
Mientras los celulares seguirn operando de la manera tradicional, delegando el clculo a los servidores de Google, en
las PC las HCG podrn hacer uso de la potencia local.
La ltima versin es mucho ms que eso. Un replanteo total del cdigo, derrumbando los lmites originales, como la
cantidad de columnas o de filas, y agregando funciones largamente solicitadas.
Este replanteo profundo parece llegar para quedarse. No ms nuevas versiones por muchos aos. En adelante, se
seguirn incorporando novedades de forma paulatina y suave, ya sin cambios de versin.
Y adentrando en la pura especulacin y sin fundamento alguno, me parece que a lo largo de los aos veremos la
integracin de los Formularios de Google con Google Plus, con ms facilidad para difundir encuestas y registrar quin
responde.
4 Ver comentarios
[http://chandoo.org/img/f/sumifs-excel-formula.png]
SUMAR.SI.CONJUNTO
Si leste este artculo anterior [http://hojasdecalculogoogle.blogspot.com.ar/2013/06/sumarsiconjunto.html] , con la nueva funcin
SUMIFS se terminaron las complicaciones. La funcin SUMIFS funciona exactamente igual que
SUMAR.SI.CONJUNTO. De hecho, SUMIFS es el nombre de la funcin en Excel en ingls, y no hay que confundir con
SUMIF (SUMAR.SI).
buscar
la funcin suma valores de la columna A, cuando los respectivos valores de la columna B son mayores que 20 y los de
la C son menores que 30. No hay lmite en la cantidad de criterios que se pueden agregar, siempre poniendo primero el
rango y luego la condicin.
Si se necesitan criterios ms complejos, siempre se puede implementar la manera ms verstil pero ms compleja
del artculo anterior [http://hojasdecalculogoogle.blogspot.com.ar/2013/06/sumarsiconjunto.html] .
Comunidad HCG
3 Ver comentarios
La necesidad existe, pero el enfoque es radicalmente equivocado. En este artculo no apunta tanto a revelar cmo lo
podemos hacer, sino a evitar que se den la cabeza contra la pared contndoles cmo no se puede hacer.
El problema aparece a la hora de distribuir ese formulario entre los usuarios que lo deben completar. Las Hojas de
Clculo Google (HCG) no son archivos, y cuando se comparten, los usuarios acceden a la MISMA HCG. Incluso, si la
modifican al mismo tiempo, vern los cursores de los otros usuarios y lo que escriben. Si tiene casilleros para
completar, el usuario ver lo que escribi el ltimo que pas por ah.
Finalmente, cuando todos los usuarios nos avisan que ya completaron el "formulario", lo nico que tendremos es un
palimpsesto, la nica HCG, escrita y reescrita una y otra vez.
La conclusin inmediata es copiar la HCG, haciendo una copia por cada usuario. Su utilidad es limitada, slo sirve
cuando se sabe de antemano a quin se enviar. No sirve, por ejemplo, para un formulario pblico o un sistema de
cotizacin web, al que acceder cualquiera. Incluso si esto no fuera un problema, s puede serlo el trabajo de compilar
las respuestas recibidas en diferentes HCG.
La razn fundamental por la que no conviene intentar hacer formularios con HCG, es porque se rigen por paradigmas
diferentes. Usar una HCG para hacer un formulario es como usar ladrillos para hacer un auto. No digo que no se
pueda.
buscar
Classic
Google Forms es una herramienta para crear formularios, ms elegantes que una hoja de clculo, pero tambin ms
limitados. Google Forms se organiza como una sucesin de preguntas con sus casilleros para respuestas, que pueden
aparecer en una sola pgina web, o en pginas consecutivas.
Google Forms admite casilleros de texto, de fecha, de seleccin de una lista, y algunos otros, y las vuelca en una hoja
de clculo, una formulario por fila, una pregunta por columna. De este modo, tendremos todas las respuestas en una
nica hoja.
Algunas funciones muy requeridas slo estn disponibles en Google Apps. Sin Google Apps:
Las respuestas son annimas, el formulario no registra el nombre del usuario que responde. Ni siquiera le solicita
iniciar sesin para responder
El mismo usuario puede responder todas las veces que quiera, y se registrarn como respuestas adicionales, sin
ningn indicio que permita descubrir que son del mismo usuario
Los formularios son abiertos para todo el pblico, pero una manera de restringirlo a un grupo cerrado de usuarios
consiste en enviarles el enlace por email solamente a ellos. Sin embargo, nada impide que uno de ellos reenve el
enlace a otra persona y se termine haciendo pblico.
Finalmente, los formularios no sirven para mostrar informacin, sino solamente para solicitarla. Es decir, no se puede
navegar a travs de las respuestas recibidas con el formulario. Las respuestas se almacenan en una hoja de clculo,
una respuesta por fila.
Por todo esto, hay que usarlos para lo que fueron creados: para recopilar informacin pblica. Si se desea identificar a
quin respondi, una tcnica consiste en acercarle un cdigo nico (por email, por ejemplo), que el usuario deber
pegar en algn campo del formulario. Pero no es un camino viable como cuadro de dilogo de un sistema hecho en
hojas de clculo.
Pero no podremos compartirlo, y si lo hacemos, deberemos cuidar de que dos usuarios no estn completando el
formulario al mismo tiempo. De hecho, sabemos que otros usuarios podrn ver en tiempo real lo que se est
escribiendo ah.
Esto funciona solamente en un ambiente colaborativo, entre gente que se conoce y se respeta. Las HCG tienen chat
que facilitan la coordinacin. Pero no se puede poner en una pgina web, abierto al pblico, ni se puede convocar a
nuestros clientes a que usen el formulario de esa manera.
En su momento Google desarroll una API particular para esto, y luego hasta cre un "GUI Builder" para disear
cuadros de dilogo de manera grfica. Pero todo esto fue superado, y ahora los cuadros de dilogo se hacen en HTML.
Sandboxed HTML.
Para quienes soaban con hacer formularios con Forms o HCG, encontrarn que el desarrollo de un formulario
mediante cdigo es un trabajo experto y tedioso. En cambio, para los programadores, la nueva API HTML es una
bendicin: ahora pueden hacer el formulario en HTML!
A no engaarse, hay que saber programar, lograr que funcione es un desafo, sandoboxed HTML falla donde menos lo
esperbamos, y finalmente, cuando todo est como debe estar, notaremos que es extremadamente lento: el cuadro de
dilogo demooooora en abrir.
Google promete que se puede acelerar la ejecucin de estos formularios, adoptando ciertas convenciones extraas al
escribir el cdigo. No lo prob, no conozco a nadie que lo haya probado. Algn da lo probar para ver cunto se
acelera la ejecucin.
buscar
dar cuenta que en vez de eso conviene programar la aplicacin entera, y olvidarse de la hoja de clculo.
Classic
Conclusiones
Salvo en los casos particulares donde Google Forms te sirva, por ahora lo mejor es completar las tablas de datos celda
por celda, sin formularios.
La tecnologa est, falta un intermediario que la ponga al alcance de todos. No me extraara que algn da el producto
Forms termine cubriendo este inters, pero estamos hablando de aos.
2 Ver comentarios
Las hojas
de clculo
Google
tienen una
serie de
funciones
muy
especializa
das, muy
particulares
, que
conviene
conocer por
lo menos
de vista,
porque si
alguna vez
[http://www.efunda.com/math/bessel/images/BesselJPlot.gif]
las llegs a
necesitar, te resolvern lo que no se puede hacer de otra manera. He aqu una rpida revisin de estas capacidades
poco conocidas.
Una caracterstica interesante es que la URL puede provenir de una frmula, de manera que podemos hacer cambiar la
imagen en funcin de los valores de otras celdas. La siguiente frmula muestra los colores del semforo segn el valor
0, 1 o 2 de la celda A1:
=image(
if(A1=2;"http://2.bp.blogspot.com/_AyWdu-Rfl6E/S-BYnWBCevI/AAAAAAAAASw/7IZ79-
dANE0/s1600/circulo_rojo.JPG";
if(A1=1;"http://www.quia.com/files/quia/users/sandrarosado/FormaGeometricas/circulo-
amarillo";
"http://alene2.files.wordpress.com/2010/02/2-4720circulo20verde_180.jpg")))
La frmula no es compleja, es larga porque incluye tres url de las tres imgenes.
El argumento opcin es opcional (no es una redundancia, no se me confundan con las palabras), y permite elegir 4
formas de dimensionamiento de la imagen. IMAGE es una de las pocas funciones con una descripcin completa en la
ayuda de Google, que aparece mientras la escribimos en una celda, pero que para su conveniencia la pego a
continuacin:
=image(URL) o=image(URL; 1): al insertar esta frmula en una celda, la imagen se escala para que quepa dentro de la celda
seleccionada. Si la celda es mayor que la imagen que quieres insertar, el resto de la celda aparecer en blanco.
=image(URL; 2): al insertar esta frmula, la imagen se expande y se ajusta al tamao de la celda seleccionada. La relacin de
buscar
=image(URL; 3): al insertar esta frmula, la imagen se inserta en la celda respetando su tamao original. Si la imagen es mayor
Classic
=image(URL; 4; height; width): con esta frmula se puede personalizar el tamao de la imagen especificando los valores de altura
y de ancho de la misma en pxeles. En esta opcin es necesario indicar los parmetros height y width.
=ImportHtml("https://www.google.com.ar/search?q="&A1; "list";0)
Otro ejemplo: esta frmula en una celda produce una tabla larga de 4 columnas y ms de 300 filas, con todas las
funciones de las hojas de clculo Google.
=ImportHtml("https://support.google.com/drive/table/25273?
hl=es&page=table.cs&rd=1";"table";0)
El segundo argumento, etiqueta, puede ser list o table, como se observa en los dos ejemplos. list vuelca los datos en
una columna, table despliega una tabla completa. table busca la etiqueta html <table> para extraer los datos. Si hay
varias de estas etiquetas, el argumento final, ndice, se usa para indicar cul de todas, empezando por cero.
Pero antes de que les explote el cerebro, les cuento algunas limitaciones:
Slo funciona con pginas web, accesibles por Internet. No funciona con los sistemas de tu oficina si no se pueden
acceder por Internet.
Slo funciona con pginas pblicas, que no requieran autenticacin (usuario y contrasea).
Las pginas web deben tener sus datos dispuestos en un tag <table> o en algn tipo de lista, de otro modo no es
posible acceder a ellos. La mayora de las pginas web dinmicas no usan ninguna de estas formas de presentar
datos.
Son los servidores de Google los que acceden a la pgina web para extraer la informacin; no es el navegador del
usuario el que lo hace. Por eso, aunque el usuario pueda acceder a un sistema privado, si los servidores de Google no
tienen acceso libre, la funcin no podr obtener los datos.
Complementando importHtml
En general, los sitios web de diarios y noticias tienen pginas dinmicas y no usan etiquetas <table>, y la funcin
IMPORTHTML no funciona. Pero por suerte, la mayora de estos mismos sitios web publican su informacin por medio
de los denominados feeds. En estos casos, la funcin IMPORTFEED viene al rescate.
Si bien se puede usar de la manera tradicional IMPORTFEED(URL), su sintxis es ms completa, permite filtrar los
datos, elegir las columnas a mostrar y limitar la cantidad de filas:
Finalmente, para casos ms selectos, existe la funcin IMPORTXML, cuyo nombre lo dice todo.
De manera similar a lo comentado para la funcin IMAGE, se puede cambiar la url para mostrar diferentes tablas en la
Classic
Traducciones e idioma
En el raro y muy especfico caso en que hagas alguna hoja de clculo compartida e internacional, este par de funciones
te pueden ser tiles:
DETECTLANGUAGE(range) intenta identificar el idioma a partir del contenido de un rango
GoogleTranslate(texto; idioma del texto; idioma a traducir) traduce un texto
Los idiomas usan la codificacin de Internet: es para castellano, en para ingls, es-419 para castellano
latinoamericano...
Ver comentarios
A continuacin se plantean situaciones tpicas, y donde es posible, dos soluciones para cada una: la solucin clsica,
conocida por todo aqul que domina las hojas de clculo, y una solucin nueva, que hace uso de nuevas tecnologas de
hojas de clculo, slo conocidas por los iniciados en estas artes.
Texto encolumnado
Un formato de exportacin de tablas que utiliza la mayora de los sistemas es el de texto encolumnado. El sistema
genera un archivo de texto, con una cantidad de caracteres determinada para cada columna. Si el contenido es ms
corto, lo rellena con espacios.
La manera ms prctica de separar el texto en columnas consiste en pegar todo en la columna A, a partir de la celda A2
(dejando la fila 1 libre), y luego separar en columnas a partir de la B hacia la derecha.
En la fila 1, a partir de B1, anotamos la posicin del caracter inicial de cada columna:
B1) 1
C1) 16
D1) 26
E1) 31
F1) 1000
Siempre tendremos 1 en B1. Para hacer funcionar las frmulas de manera elegante, se agrega un valor alto (1.000 por
ejemplo) luego de la ltima columna. En B2 introducir la frmula:
Copiando esa frmula a las cuatro columnas, y hacia abajo hasta el final de la lista de la columna A, se reconstruye la
tabla de datos.
La solucin nueva
buscar
Classic
(.{#})
El formato CSV
Los archivos con extensin CSV tienen uno de los formatos de tablas de datos ms simples y compatibles en toda la
industria: son archivos de texto, que separan con comas el contenido de cada celda de una fila, y con salto de lnea las
filas. Las hojas de clculo Google se pueden descargar en este tipo de archivos, y viceversa, al subirlos Drive lo
reconoce y lo convierte a hoja de clculo.
No obstante, no sucede lo mismo si en vez de subir el archivo, pegamos el texto directamente en una hoja de clculo.
Al pegar, las hojas de clculo usan los saltos de lneas para separar el texto en celdas de forma vertical, pero no
realizan una separacin horizontal. Si bien se puede llenar la hoja de clculo con frmulas para separar este texto en
columnas, a veces la manera ms prctica es programar una "macro" (en rigor se llaman "secuencias de comandos").
Men Herramientas, Editor de secuencias de comando... , pegar lo que sigue y guardar:
Si el texto CSV se peg en la columna A, en B1 se introduce la siguiente frmula, y luego se copia a lo largo de la
columna B:
B1)=separarH(A1; ",")
y listo. Notar que el segundo argumento indica el caracter que se usar como separador. En otro caso podra usarse
punto y coma, por ejemplo.
La frmula se introduce en la columna B Y el resto de las columnas? Esta funcin, por simple que parezca, es una
funcin matricial, y su resultado "desbordar" hacia las siguientes columnas de manera horizontal, ocupando todas las
que necesite.
La solucin nueva
Sin necesidad de secuencias de comandos, suponiendo que se van a obtener cuatro columnas, la siguiente frmula lo
resuelve:
B1)=regexextract(A2; "(.*),(.*),(.*),(.*)")
Esta frmula se extiende automticamente hacia la derecha para mostrar las cuatro columnas. Generalizando, para
cada columna hace falta agregar ,(.*)
Los amantes de la automatizacin pueden preferir esta forma, para 100 columnas:
Se pueden separar por coma, usando la funcin anterior. Sin embargo en este caso resulta ms til que las celdas
separadas se desplieguen hacia abajo en vez de hacia la derecha. Para esto se puede transponer el resultado:
B1)=transpose(separarH(A1; ","))
buscar
separarV:
Classic
function separarV(texto, separador){
return texto.split(separador).map(function(e){return [e];});
}
B1)=separarV(A1; ",")
La funcin MID(texto, inicio, longitud), extrae una determinada cantidad de caracteres del texto dado, a partir de una
posicin inicial.
La funcin SEARCH(texto buscado, texto donde buscar, posicin inicial), indica en qu posicin se encontr el
texto buscado.
Combinndolas, usando SEARCH para determinar dnde estn las comillas, y los signos < y >, y extraer el nombre en
la celda B1 y la direccin en la celda C1:
La solucin nueva
Estas frmulas, evidentemente ms compactas que las clsicas, esconden un lado oscuro: el segundo argumento
corresponde a una expresin regular, donde cada smbolo tiene un significado no evidente, que es necesario estudiar
para poder adaptarlas a otras situaciones. Un poco ms sobre las funciones de expresiones regulares, en este otro
artculo [http://hojasdecalculogoogle.blogspot.com.ar/2013/06/busqueda-avanzada-de-textos-dentro-de.html?view=sidebar] .
Para el ejemplo supongamos que la tabla con diez contactos est en el rango A1:B10; sus nombres en la columna A y
sus direcciones en la columna B. No voy a desarrollar la tediosa solucin clsica que necesita un montn de celdas
auxiliares, sino que voy directo a la solucin nueva: la frmula matricial (matricial = mgica) que lo compone todo en un
solo paso, en una sola celda:
Esta celda reunir las diez direcciones de correo electrnico, lista para copiar y pegar en el campo PARA.
La funcin central es JOIN(separador, rango de celdas), que produce un nico texto con el contenido de las celdas
separadas por coma, punto y coma o cualquier cosa que se indique en el argumento "separador", que no est limitado a
un nico caracter.
La frmula matricial se utiliza para expandir las posibilidades de JOIN, que en lugar de tomar los contenidos de las
celdas y unirlos con coma, toma una operacin ms completa, la concatenacin de comillas, smbolos, una celda de la
columna A y otra de la B.
Classic
REGEXEXTRACT. Sus
aplicaciones son enormes, pero su dominio requiere bastante lectura y mucha prctica.
Creo que ya no quedan nuevas funciones sencillas para incorporar en el mundo de las hojas de clculo. En lo sucesivo,
cualquier funcin potente requerir cada vez ms dedicacin y experiencia.
2 Ver comentarios
27th June 2013 Macros en las Hojas de Clculo Google: la interfaz de usuario
[http://optimistas.es/wp-content/uploads/2013/05/Imaginaci%C3%B3n-la-clave-del-%C3%A9xito.jpg]
[http://optimistas.es/wp-content/uploads/2013/05/Imaginaci%C3%B3n-la-clave-
del-%C3%A9xito.jpg]
Dicen que la imaginacin adopta una de dos formas: la de actividad creativa, de donde surgen innovaciones
tecnolgicas y obras como Harry Potter, o la de mera fantasa, una actividad estril y a veces perniciosa. La
caracterstica central de la actividad creativa no radica en su resultado (la mayora de las veces fracasa), sino en que se
encuentra atada a la realidad: la imaginacin explora posibilidades desde una premisa real.
Para potenciar su creatividad, este artculo se dedica a presentar la realidad de las interfaces de usuario, qu pueden y
qu no pueden hacer con ellas las macros de hojas de clculo Google, y evitar as perder el tiempo intentando lo
imposible.
En otras palabras, una macro puede modificar celdas de una hoja de clculo que el usuario no tiene en pantalla, pero no
puede abrir una ventana del navegador para mostrar la hoja de clculo. Esto es muy diferente a Excel, que para
modificar una celda requiere abrir la hoja de clculo, y sta aparece en pantalla.
buscar
Classic
[http://kissflow.com/wp-content/uploads/2012/11/Google-
Apps-workflow-analytics.png]
Por seguridad, Google decidi limitar la injerencia de las macros en la interfaz de usuario a unas pocas acciones
funcionales. Esto es lo que pueden hacer:
Cambiar la hoja activa
Cambiar la seleccin (la posicin del cursor)
Agregar un men y sus respectivos submenes
Cada submen puede desplegar otro submen, o disparar una script
El men se agrega para una hoja de clculo, no para todas
Adosar un script a un dibujo o a una imagen
que se dispara cuando se hace clic
Presentar una ventana de dilogo
Presentar un cuadro lateral
Men
Como coment en un artculo anterior [http://zef.me/wp-content/uploads/2010/03/gas-menu.png]
[http://hojasdecalculogoogle.blogspot.com.ar/2013/06/macros-en-hojas-de-
calculo-google.html] , lo usual es agregar el men en el momento en que se abre la hoja de clculo, recordando que no
perdura luego de cerrar la hoja de clculo. En rigor, el men se agrega a la instancia actual de la interfaz de Hojas de
Clculo Google, que es una pgina web que se crea al cargarse, se cierra al abandonarse, y los cambios no persisten.
function onOpen() {
SpreadsheetApp.getActive().addMenu(
'Men agregado',
[{
name: 'Submen que dispara la funcin nombreDeLaFuncinALlamarConElMen',
functionName: 'nombreDeLaFuncinALlamarConElMen'
},
{
name: 'Otro submen que dispara otra funcin',
functionName: 'nombreDeLaOtraFuncinALlamarConElMen'
}]
);
}
El men se agrega a la derecha de los menes predeterminados. Al elegir un men, el usuario dispara la funcin
asociada, que se invoca sin argumentos. La estrategia de men no est pensada para modificarlos sobre la marcha.
Una vez agregado el men, no se pueden insertar nuevos submenes, ni inhabilitar otros. En el mejor de los casos se
puede eliminar el men.
Tampoco dispara eventos al desplegarse. El nico evento de men es el clic de usuario en un submen, que invoca la
funcin asociada.
buscar
Classic
sta es la nica manera de agregar botones a la hoja de clculo. No son botones animados, pero cumplen la funcin.
[http://1.bp.blogspot.com/-Itaq0w52Ku4/ULzmkxoOBxI/AAAAAAAAA9U/aBX3jRO56JU/s1600/4.png]
La clase Browser [https://developers.google.com/apps-script/reference/base/browser?hl=es-ES] tiene el mtodo msgBox, para
presentar al usuario una ventanita con un mensaje y algunos botones (Aceptar, Cancelar, etc.), y el mtodo inputBox,
para solicitar un texto al usuario.
Por otro lado son muy fciles de usar, pues no requiere elaborar una estrategia de programacin asincrnica ni oir
eventos, pues la ejecucin del script se pausa hasta la respuesta del usuario:
Una barra lateral (o sidebar) es una ventana vertical que se alnea a la derecha de la pantalla, y s permite al usuario
continuar usando la hoja de clculo.
El contenido de ambas es (casi) totalmente libre, y se escribe en HTML, mediante HTML Services
. Esta pgina explica en ingls el uso de HTML Services buscar
[https://developers.google.com/apps-script/guides/html-service?hl=es-
ES#serve_html_as_a_google_docs_sheets_or_forms_user_interface] . El tema no es trivial, requiere un tiempo de aprendizaje
Classic
Para evitar confusiones, HTML Services es la versin nueva y definitiva de Google para interfaces de usuario en sus
productos, que reemplaza a la primera, UI Services [https://developers.google.com/apps-script/uiapp?hl=es-ES] , ms
restrictiva y con un paradigma diferente al HTML. Si alguien oy hablar de GUI Builder, una pgina para crear
interfaces de usuario, sepa que entr en obsolescencia en Marzo de 2013, y ya no conviene dedicar esfuerzo para
aprender su uso.
HTML Services
permite al
desarrollador de
scripts escribir
un cuadro de
dilogo o una
barra lateral
directamente en
HTML (incluso
en HTML5). Sin
embargo, por
razones de
seguridad, HTML
Services es un
poco ms
restrictivo que el
HTML comn, y
[http://otake.com.mx/Wallpapers/Html5-01-1024x768.jpg]
pasa por un
proceso denominado Caja Sanitization, que verifica que se respeten las directivas de seguridad, que impiden un uso
malintencionado.
Por lo dems, HTML Services es la nica manera de ejecutar cdigo en el navegador, como contraste a los scripts de
Google que se ejecutan en sus servidores.
7 Ver comentarios
[http://marocan.com.mx/images/mcalculo.png]
Rompiendo mitos
Google Apps Script no es un
lenguaje dedicado
exclusivamente a las macros
de hojas de clculo, sino que
tienen muchos otros usos. Por
eso, cada macro de hoja de
clculo inicia sin asumir que
hay una hoja de clculo abierta,
[http://disepro.com.ar/wp-content/uploads/2013/04/Google.jpg]y lo usual es que las primeras
instrucciones sean las que determinan con qu hoja de clculo se va a trabajar.
Finalmente, Spreadsheet Services representa una hoja de clculo bajo la forma de un objeto Spreadsheet, una hoja
como objeto Sheet, y un rango de celdas como un objeto Range. Pero no existe un objeto para una celda. En rigor,
una celda es un rango de 1 x 1, de una fila de altura y una columna de ancho.
En este artculo nos enfocaremos en los scripts para hojas de clculo Google, que el usuario ejecuta desde un men, o
como funcin en una frmula.
Hojas de clculo
SpreadsheetApp.getActive()
Devuelve un objeto Spreadsheet, que representa la hoja de clculo activa, es decir, aqulla desde donde
el usuario dispar el script.
SpreadsheetApp.openByUrl(url)
Hojas
SpreadsheetApp.getActiveSheet()
Devuelve un objeto Sheet, que representa la hoja activa, es decir, la hoja seleccionada.
Rango
SpreadsheetApp.getActiveRange()
Devuelve un objeto Range, que representa el rango seleccionado, es decir, el rango iluminado con el
cursor.
De esta manera se accede directamente a objetos que representan los elementos que el usuario ha seleccionado.
sta no es la sintaxis que se utiliza con los objetos. Para acceder al mismo rango por medio de los objetos de
Spreadsheet Services, se usa:
SpreadsheetApp.getActive().getSheetByName("Hoja 1").getRange(5, 1, 6, 2)
Classic
Las filas y las columnas se numeran desde la 1 (en vez de 0 como suele ser en javascript), y de esta manera la columna
A es la 1. Esta forma de expresar los argumentos al mtodo getRange es til cuando el tamao y posicin del rango
surge de algn clculo numrico, pero es incmodo cuando el programador conoce el rango expresado en el formato
A1. Hay que notar adems que el mtodo getRange no tiene un argumento para indicar la hoja, sino que es un mtodo
que se aplica sobre la hoja, en este caso hoja1.
Afortunadamente, el mtodo getRange admite que el argumento le sea proporcionado en formato A1, de manera que la
ltima lnea de cdigo se puede escribir tambin as:
Para expresar el rango se pueden usar maysculas o minsculas indistintamente. Hay que notar que para getRange los
signos $ son irrelevantes, pero no molestan. $A$5:B10 y A5:B10 son el mismo rango.
Incluso se puede usar la sintaxis expandida, incluyendo la hoja, como en este ejemplo:
Esta ltima forma requiere varios comentarios. Primero, el rango devuelto es el del argumento, es decir, un rango de la
Hoja 2. La Hoja 1, implcita en el objeto hoja1, se ignora en favor de la hoja indicada en el argumento. Entonces para
qu hace falta el objeto hoja1? Pues no hace falta, y el mtodo getRange se puede llamar directamente desde el objeto
Spreadsheet, as:
Segundo, el nombre de la hoja (Hoja 2 en el ejemplo) no va entre comillas como acostumbra en las frmulas de las
hojas de clculo. Seguramente confunden las comillas que el lenguaje javascript require para indicar que se
proporciona un texto, pero el texto suministrado difiere en ese detalle, y lamentablemente no admite las comillas. Es
comn copiar una referencia de una frmula directamente al editor de secuencias de comando, dejando las comillas que
producirn un error al ejecutarse el mtodo.
Finalmente, tambin se puede obtener el rango por su nombre de intervalo (suponiendo que se le asign un nombre)
con:
rango.getValue()
rango.setValue('Nuevo contenido de la celda')
Estos mtodos obtienen o escriben un nico valor constante a una nica celda: la celda superior izquierda del
rango
rango.getValues()
rango.setValues(matrizDeContenidos)
Estos mtodos difieren de los anteriores en que se expresan en plural (etValues)
Obtienen o escriben todos los valores del rango, por medio de una matriz de dos dimensiones, del mismo
tamao.
Un ejemplo para ilustrar el uso de setValues:
hojaDeClculo.getRange('Hoja 2!D2:E3').setValues(
[['Texto en d2', 100], ['Texto en E2', 'Texto en E3']]
);
El contenido puede ser numrico o de texto. Los parntesis conforman la matriz de dos dimensiones en javascript, que
se interpreta como un vector (array) de filas, cada una consistente en un vector de contenidos de celdas:
Classic
var filaInicial = 2;
var columnaInicial = 4; // corresponde a la columna D
var matrizDeContenidos = [['Texto en d2', 100], ['Texto en E2', 'Texto en E3']];
hoja2.getRange(
filaInicial,
columnaInicial,
matrizDeContenidos.length,
matrizDeContenidos[0].length
).setValues(matrizDeContenidos);
Lo anterior sirve para leer el contenido de una celda, que es el resultado de su frmula, y para escribir constantes:
textos o nmeros. Para interactuar con las frmulas se usan los mtodos getFormula, setFormula, getFormulas,
setFormulas.
rango.setFormula('=SUM(A1:A5)');
Es necesario anteponer el signo =, como de costumbre. Cabe sealar que setFormulas se usa para escribir las
frmulas de todas las celdas de un rango, proporcionando cada una en una matriz. Si lo que se pretende es escribir la
misma frmula en todo el rango, hay que ejecutar una accin de copiado: primero se escribe una frmula en una celda,
y luego se copia esa celda a un rango de esta manera:
rangoConLaFrmula.copyTo(rangoALlenarConFrmulas);
El mtodo getA1Notation devuelve solamente la referencia de filas y columnas (en este caso "B5:G10"), pero sin el
nombre de la hoja, que en el ejemplo est agregado por concatenacin.
Ver comentarios
Qu puedo hacer con mi tabla de datos buscar
Classic
En este punto cabe sealar la diferencia entre una tabla de datos para anlisis, y una tabla de presentacin de datos.
La tabla de presentacin de datos est diseada para que la lea una persona: abundan los colores y las descripciones;
el formato es importante, no es raro encontrar dos o tres filas para los encabezados, con celdas combinadas para los
"encabezados de encabezados", como sta:
[https://fq3esopfr.wikispaces.com/file/view/Tabla+de+datos+experimento+de+toallas.png/352952672/Tabla%20de%20datos%20exper
imento%20de%20toallas.png]
En cambio, una tabla de datos para anlisis prioriza el "acceso automatizado" a los datos. Se le puede aplicar formato
(colores, bordes, etc.), pero sin afectar su estructura. Por ejemplo, no se deben combinar celdas ni tener ms de una
fila de encabezados:
[http://4.bp.blogspot.com/_SaM7_5Yzn3k/SedfLlk04wI/AAAAAAAAABU/wwQqkajEN6E/s320/tabla+de+datos.JPG]
En mi experiencia, sta es la mejor manera de organizar las tablas de datos en Hojas de clculo Google: "Las mximas
de las tablas de datos".
1. nica: Una sola tabla de datos por hoja
2. Nominada: Nombrar la hoja de manera elocuente, para que se entienda el contenido de la tabla
3. Vrtice: Crear la tabla a partir de la celda A1, sin dejar filas o columnas intermedias en blanco
4. Limpia: En la hoja, no usar celdas que no pertenezcan a la tabla
1. No agregar nada despus de la ltima fila: no agregar fila de totales
2. No agregar nada a la derecha de la tabla (excepto nuevas columnas de la tabla)
5. Encabezada: Reservar la fila 1 para los encabezados, y resaltarla en negrita
1. Siempre en la fila 1
2. No anteponer ttulos ni descripciones
3. Limitarse a una nica fila de encabezados, y no combinar celdas
6. Definida: No dejar ninguna columna sin encabezado
7. Tipada: Mantener el tipo de dato en toda la columna. Por ejemplo, si es numrico, no intercalar un texto. Si es
fecha, debe estar bien escrita. Los tipos de datos son:
1. Nmero
2. Texto
3. Fecha
8. Atmica: Separar los datos en la mayor cantidad de columnas necesarias. Por ejemplo, a veces conviene separar
el nombre en nombre y apellido; de esta manera se podr buscar y ordenar por apellido. Evitar amontonar varios
datos en una sola celda. Por ejemplo "argentino, varn, casado, mayor de edad" debera separarse en cuatro
columnas.
9. Desagregada: Los datos deben estar abiertos en la mayor cantidad de filas. Siempre es posible obtener la suma
de varias filas, pero es imposible descubrir las filas a partir de su suma.
10. Rigurosa: No basta con que una persona lo pueda entender: lo debe entender la computadora. No es lo mismo 9
que "nueve". No es lo mismo 1/2/2013 que "primero de Febrero de 2013".
11. Explcita: Evitar el uso de colores para marcar filas o celdas. Las frmulas no interpretan colores. Si hay que
marcar algunas filas, se crea una columna para la marca, escribiendo VERDADERO en las que corresponda. En
todo caso, los colores pueden ser redundantes.
12. Pura: Corregir los errores que puedan haber en las celdas de la tabla. Un error en los datos produce error en las
buscar
Classic
Explotacin de datos
La tabla armada segn las indicaciones se presta para una diversidad de usos. A continuacin se explican los
beneficios de esta estrategia, y se indican algunas formas de acceso a los datos.
Un problema comn es descubrir que cada vez que se agrega una fila a la tabla de datos, hay que corregir todas las
referencias al rango. Si el rango anterior era Tabla!A1:F99, ahora ser Tabla!A1:F100.
La mejor tcnica para evitar este inconveniente es referenciar columnas completas, as: Tabla!A:F . Por supuesto, es
indispensable que la tabla est limpia. Una desventaja es que los encabezados quedan dentro del rango.
Si las frmulas no funcionan con los encabezados, sta es una alternativa a lo anterior: Tabla!A1:F10000 , donde
10.000 es un nmero de filas que nuestra tabla nunca tendr.
Otra manera consiste en agregar una fila final vaca, pintarla de naranja o rojo, y exigir que las nuevas filas se inserten
siempre por encima de la fila vaca final. Si la fila vaca es la fila 100, el rango ser Tabla!A1:F100. Cada vez que se
inserte una nueva fila, el rango se actualizar automticamente. La desventaja es que las frmulas recibirn siempre
una fila dems, la fila vaca. Adems, esta estrategia no sirve para IMPORTRANGE, porque las referencias en otras
hojas de clculo no se actualizan dinmicamente.
Luego de elegir la manera de referenciar la tabla de datos, es muy recomendable ponerle nombre al rango con el men
Datos, Intervalo con nombre y protegidos..., Aadir intervalo. El nombre ms adecuado es el nombre de la tabla.
De la misma manera, para no tener que actualizar los rangos manualmente cuando se agreguen columnas a la tabla de
datos, la mejor estrategia es utilizar una columna final vaca (en los rangos ejemplos es la columna F), y
disciplinadamente agregar columnas insertndolas antes de esa columna final.
Funciones totalizadoras
En otra hoja se desarrolla el anlisis de los datos. Las "totalizadoras" son funciones de agregacin, como SUM,
COUNT, AVERAGE. Lo ms conveniente es referenciar la columna, pues la mayora de estas funciones no se ve
afectada por el encabezado, por ejemplo:
=SUM( Tabla!D )
Por lo general, estas funciones se aplican sobre una nica columna. Una ventaja de referenciar los rangos es que si la
columna se mueve cambiando de posicin en la tabla, los rangos se actualizan dinmicamente, y no hace falta modificar
las frmulas.
Es muy recomendable tomarse un tiempo para asignarle nombre a estos intervalos (rangos) de columna. Suponiendo
que la columna D corresponde a ingresos, la frmula anterior se vuelve mucho ms elocuente de esta manera:
=SUM( Ingresos )
La funcin VLOOKUP (BUSCARV en Excel) es simple y potente, pero su diseo primitivo no responde a las exigencias
de las hojas de clculo avanzadas. Un par de limitaciones a modo de ejemplo:
Slo busca por la primer columna del rango
La columna resultado se indica por un nmero, no por una referencia, y no se actualiza dinmicamente si la
columna se mueve a otra posicin
Una alternativa consiste en combinar la funcin MATCH y la funcin OFFSET:
Parece complicado, pero slo hay que definir tres argumentos, y basta copiar y pegar. VLOOKUP tambin es
complicada, hasta que uno se acostumbra a usarla.
Se puede filtrar filas y extraer una tabla reducida con slo algunas de las columnas de la tabla de datos, mediante la
funcin QUERY, que se explica mejor en este otro artculo [http://hojasdecalculogoogle.blogspot.com.ar/2013/06/tu-base-de-
datos-en-hojas-de-calculo.html] , y que tiene esta forma:
Esta funcin genera la tabla completa; incluso reacomoda automticamente su tamao cuando cambian los datos de la
Classic
A la hora de agregar un pie de tabla con totales, surge el problema del redimensionamiento de la minitabla. Como no se
trata de una tabla de tamao fijo, al crecer sobreescribe la fila al pie. Las dos estrategias son:
Colocar los totales encima de los encabezados (es decir, arriba en vez de abajo)
Colocar los totales bien abajo, donde sepamos de antemano que la minitabla nunca llegar
Con la hoja debidamente compartida, otras hojas de clculo pueden obtener los datos de la tabla importando un nico
rango. Para estar preparado por si la tabla crece, conviene referenciar columnas completas.
=IMPORTRANGE("claveDeLaHoja123"; "Tabla!A:F")
La manera en que se referencian celdas entre diferentes hojas de clculo, hacen que la mejor prctica sea usar
IMPORTRANGE exclusivamente para replicar los datos en la otra hoja de clculo, y luego usar frmulas en otras celdas
para operar con ellos.
Columnas automticas
Frecuentemente es necesario complementar la tabla con columnas calculadas mediante frmulas. En general, una
columna como stas contiene una misma frmula copiada a todo lo largo, y la frmula suele hacer referencia a datos de
la misma fila.
Mientras las columnas de datos contienen constantes, es decir, datos que no provienen de frmulas, las columnas
automticas muestran datos calculados, y las frmulas de cada fila se copian de la otra fila de la misma columna.
Un primer criterio consiste en "amontonar" todas estas columnas automticas a la derecha, de modo que para actualizar
los datos, baste con pegarlos a la izquierda en un nico rango, sin pisar las frmulas.
Un problema comn consiste en la necesidad de copiar las frmulas cada vez que se agregan filas. Esta tarea se
puede automatizar a travs de un uso no ortodoxo de ARRAYFORMULA
[http://hojasdecalculogoogle.blogspot.com/2013/06/liberando-la-energia-del-atomo-la.html] . La tcnica suele funcionar bien para
frmulas sencillas que no contengan funciones de agregacin (SUM, COUNT, OR, AND), y consiste en reemplazar la
frmula original por una frmula matricial que "crece sola" cuando se agregan filas, de la siguiemte manera:
La reescritura se hizo en dos pasos: se reemplazaron las referencias a celdas (B2) por referencias a columnas (B:B), y
se puso todo dentro de ARRAYFORMULA(). Esta frmula debe escribirse en una celda de la fila 1.
Como la frmula se debe insertar en la fila 1, no permite escribir un encabezado. O por lo menos no de la manera que
uno quisiera, pero s de esta otra manera:
=ARRAYFORMULA(
IF(ROW(A:A)=1; "encabezado de la frmula automtica";
IF(A:A>B:B; A:A; B:B)
))
Se ve complicado, pero como su forma es siempre la misma, uno se acostumbra con el uso.
El eterno problema de las referencias a las tablas, es que hay que actualizarlas cuando crecen. Al escribir scripts,
Google tiene una funcin que devuelve el rango ocupado de una hoja. Mientras la tabla de datos est limpia, el rango
ocupado coincide con la tabla completa.
SpreadsheetApp.getActive().getSheetByName("nombre de la hoja").getDataRange()
Una tabla as creada permite publicar sus datos para que sean accedidos por otras aplicaciones y pginas web, sin
necesidad de usar la Hoja de clculo Google.
Google Spreadsheet API) [https://developers.google.com/google- buscar
url admite parmetros de filtro y ordenamiento, y se pueden realizar consultas usando los encabezados de la tabla de
Classic
Como siempre, el propietario controla la visibilidad y decide si hace pblico o no el contenido de su hoja de clculo. La
pgina web que accede debe tener permiso.
Documentacin de la tabla
Nadie lo sabe al principio, pero cualquier hoja de clculo puede terminar creciendo hasta convertirse en un sistema
informtico. Antes de tener que migrar hacia un sistema informtico a medida, uno de los primeros obstculos que
encuentra una hoja de clculo en su expansin es la falta de documentacin: nadie sabe ni recuerda con qu criterio se
hizo la hoja de clculo.
Explorar cmo est diseada una hoja de clculo es una tarea de investigacin, y muy costosa, mucho ms de lo que se
suele creer. Por este motivo, es una excelente costumbre tomar nota de los criterios de diseo de una hoja de clculo.
La manera ms prctica consiste en crear una hoja dedicada a la documentacin de estos criterios. Yo personalmente
suelo crear dos.
Ver comentarios
[http://cadazaredes.files.wordpress.com/2010/02/banner_ger_redes_es1.jpg]
En sus Hojas de Clculo, Google implement la funcin QUERY, para realizar consultas SQL sobre tablas de datos.
[http://4.bp.blogspot.com/-6DIfZ-
tVrGI/T0KjDAkrWAI/AAAAAAAAAAw/8HFspaXQJBQ/s1600/database.jpg]
Las hojas de clculo fueron siempre el primer paso para implementar bases de datos, preferentemente de una sola tabla
y no mayores a algunas decenas de miles.de filas.
Cuando la base de datos crece en cantidad y en complejidad, y se abre en varias tablas vinculadas, las hojas de clculo
dejan de ser eficientes, y conviene pasar a una base de datos formal, como Microsoft Access o Google Fusion Tables.
Luego, si la base de datos requiere alta performance y es accedida por mltiples usuarios, conviene implementar un
servidor propio con Microsoft SQLServer o MySQL.
Este artculo se ocupa de las primeras, las bases de datos pequeas que se suelen implementar en una hoja de clculo.
buscar
Classic
El nombre de la hoja es el nico ttulo de la tabla
La fila 1 se usa para encabezados de la tabla, comenzando por la celda A1, y sin dejar columnas intermedias en
blanco
La tabla se llena a partir de la fila 2, hacia abajo de forma consecutiva sin dejar filas en blanco
Debajo de la tabla se dejan todas las filas en blanco. No se agregan frmulas de suma ni nada.
Las columnas a la derecha se dejan en blanco, o bien, sin dejar columnas intermedias en blanco, se completan con
frmulas, idnticas en todas las filas
No es imprescindible seguir estos pasos rigurosamente, pero si la tabla se elabora segn estas indicaciones, sus datos
podrn usarse de muchas maneras diferentes. Estas indicaciones evitan problemas posteriores.
La funcin QUERY
QUERY es una funcin matricial propietaria de Google, que devuelve un rango con el resultado de una consulta SQL
aplicada sobre una tabla de datos. QUERY no admite todas las funciones SQL, pero s las principales. Entre otras
cosas, al aplicarse sobre una nica tabla, no utiliza FROM, ni JOIN ni ningn tipo de relaciones.
La funcin QUERY permite elegir qu campos mostrar y en qu orden, filtrar filas y ordenarlas con algn criterio, y
agrupar filas y calcular funciones de agregamiento, como SUM o COUNT. Su sintxis ms general es:
Perdn, qu es SQL?
La funcin QUERY requiere el argumento "texto de la consulta", que consiste en una expresin SQL, que en su forma
ms general es as:
SELECT las letras de columnas que quers ver, en maysculas, separadas por comas
WHERE expresiones para filtrar las filas
GROUP BY encabezados o columnas que se agruparn cuando tienen el mismo contenido
ORDER BY encabezados o columnas que se usarn para ordenar alfabticamente
Lo puse en varios renglones por claridad, pero va todo en el mismo argumento de texto. La clusula SELECT es
obligatoria, el resto es opcional.
Ejemplos:
=QUERY(Tabla!A1:K118,Select C)
Muestra solamente la columna C
=QUERY(Tabla!A1:K118,Select C,D,G,H)
Muestra esas cuatro columnas
=QUERY(Tabla!A1:K118,Select C,D,G,H WHERE C>10)
Muestra solamente las filas cuya columna C es mayor a 10
Las comparaciones y funciones, como >=, SUM, COUNT, no son las de la hoja de clculo, sino las propias de SQL.
Algunas coinciden, otras no. Por ejemplo, el promedio se calcula con AVG().
Ver comentarios
buscar
web
Classic
[http://image.shutterstock.com/display_pic_with_logo/109411/101550196/stock-photo-export-and-import-keys-shows-international-
trade-or-global-commerce-101550196.jpg]
Las hojas de clculo tradicionales pueden tomar datos de otra hoja, indicando la carpeta y el nombre del archivo. As se
crean frmulas de referencia como sta:
Los problemas comienzan cuando la hoja con datos se mueve, o nos enviamos por correo electrnico nuestra planilla
de clculo: la ruta ya no funciona. Por este y otros motivos, Google encar la vinculacin de hojas de clculo de otra
manera, con las siguientes diferencias:
La hoja vinculada no se indica por su nombre y carpeta (que pueden variar), sino por su clave key, que no vara
nunca, no importa si se mueve de carpeta, si cambia de nombre o si cambia de propietario. No importa dnde est
en la nube, su key ser siempre la misma.
La importacin no se realiza por celdas, sino por rangos. De esta manera una nica funcin IMPORTRANGE trae
un rango completo (muchas celdas) de una sola vez, lo que lo hace mucho ms eficiente y veloz.
Con esto en mente, paso a describir su uso, intercalando algunos consejos prcticos.
La funcin IMPORTRANGE
IMPORTRANG
E es una de las
pocas funciones
"propietarias"
de Google.
Google prefiere
adoptar las
funciones
estndares (que
son las que
utiliza Open
Office), y slo
opta por crear
una funcin
propia cuando
no tiene ms
remedio. Su
[http://wpmu.org/wp-content/uploads/2012/10/import-fi.jpg]
sintxis es la
siguiente, con dos argumentos:
IMPORTRANGE(
key de la hoja de clculo,
rango
)
El primer argumento es la key de la hoja de clculo de la que se extraern los datos. No hay una manera obvia para
obtener la key de una hoja de clculo, por eso describo cmo obtenerlo de su direccin web. Supongamos que la hoja
de clculo en cuestin tiene la siguiente direccin:
https://docs.google.com/spreadsheet/ccc?key=0AtqguwfEft7udE5oNlVCM2tNeWRYdFExSzR3bzJedVE#gid=0
La key es esa secuencia fea de letras y nmeros, que comienza despus de key= y termina antes del #, & o cualquier
smbolo que no sea letra ni nmero. A veces llega hasta el final. La experiencia me lleva a insistir: la key no incluye la
palabra key ni el signo = que le preceden.
buscar
'Hoja 2'!A23 (como siempre, el nombre de la hoja va entre
comillas si tiene espacios)
Classic
Los dos son argumentos de texto, por lo que deben ir entre comillas si son constantes. En el ejemplo, la funcin
completa es:
IMPORTRANGE es una frmula matricial, que devuelve un rango de datos extrados de otra hoja de clculo Google.
Este rango se vuelca en la hoja de clculo empezando por la celda donde se introdujo la funcin IMPORTRANGE, y
extendindose hacia abajo y a la derecha las filas y columnas que tenga el rango elegido.
Caractersticas de IMPORTRANGE
[http://static5.depositphotos.com/1031343/441/v/950/depositphotos_4412282-For-import-and-for-export-stamps.jpg]
Un par de cosas que conviene saber:
Se permite un mximo de 50 funciones IMPORTRANGE en una hoja de clculo Google. Es decir que se pueden
importar hasta 50 rangos (que no es lo mismo que 50 celdas).
Por eso, en lo posible, conviene poner todos los datos a exportar en un nico rango, en una misma hoja, de
manera que otras hojas de clculo usen IMPORTRANGE una sola vez.
Los datos no se actualizan instantneamente, pero tampoco demora mucho en actualizar.
En el argumento rango, el nombre de la hoja va siempre sin comillas simples.
Como toda funcin matricial, se extiende segn el tamao del rango, pisando cualquier contenido que hubiera en
las celdas. Las celdas de este rango se resisten a ser borradas o eliminadas; la funcin IMPORTRANGE las
"regenera".
Ejemplo de IMPORTHTML
Esta frmula en una celda produce una tabla larga de 4 columnas y ms de 300 filas, con todas las funciones de las
hojas de clculo Google.
=ImportHtml("https://support.google.com/drive/table/25273?
hl=es&page=table.cs&rd=1";"table";0)
No.
O bien se convierte el archivo Excel en hoja de clculo Google (una operacin que no se puede automatizar), o se
busca en Excel la manera de publicar su contenido de modo que quede accesible por HTML o XML.
Publicado 11th June 2013 por Alejandro Silvestri buscar
Ver comentarios
Classic
[http://www.kuleuven.be/english/news/unprecedented-study-
reveals-new-genetic-risk-factors-of-breast-prostate-and-ovarian-cancer/image]
Lo que en Excel se llama "macro", en las hojas de clculo Google se denomina secuencia de comandos, o script, y se
usan para dos fines:
Este artculo asume conocimientos de javascript. Si es necesario, se aprende muy fcil, basta con buscar "aprender
javascript" en Google o en Youtube.
El editor de secuencias de comandos se usa para escribir el cdigo, y se abre con el men Herramientas, Editor de
secuencias de comandos... La primera vez presentar una pgina de plantillas de secuencias de comandos. Es
bueno dedicarle un tiempo y recorrer los tutoriales y la plantilla para hoja de clculo. Pero para empezar un proyecto,
conviene utilizar "proyecto en blanco".
En lo sucesivo, si ya hay cdigo escrito, al abrir el editor de secuencias de comandos se saltear la pantalla de
plantillas, a la que se puede volver con el men Ayuda, Pantalla de bienvenida...
Google Apps Script, o GAS, usa la sintaxis de javascript, pero su poder reside en las API, que le da acceso a la mayora
de los productos de Google, como Google Drive y GMail. A continuacin recorreremos la API de hojas de clculo
[https://developers.google.com/apps-script/reference/spreadsheet/?hl=es-ES] , conocidas como Spreadsheets Services.
Classic
SpreadsheetApp.getActive()
devuelve el rango de la celda Hoja1!A1 , de la hoja de clculo activa. El argumento puede adoptar todas
las formas:
A1:B2
A:A (columna A)
1:1 (fila 1)
No admite Hoja1!A1. La hoja se debe indicar en el objeto anterior.
SpreadsheetApp.getActive().getRange('Hoja 1!A1')
similar a la anterior, esta forma s admite indicar la hoja en el argumento. Si no se indica, se asume la hoja
activa.
SpreadsheetApp.getActive().getRange('Hoja 1!A1').getValue()
Funciones a medida
Todas las
funciones
escritas en el
editor de
secuencias de
comando de una
hoja de clculo,
se pueden llamar
desde la
frmulas en
cualquier celda
de la misma hoja
de clculo. Por
ejemplo, esta
secuencia de
comandos (aqu
se requiere algn
[http://omnific.net.au/images/ComputerCode_banner.jpg]
conocimiento de
javascript):
function msUno(nmero){
return nmero + 1;
}
= MSUNO(5)
Si bien las secuencias de comando distinguen maysculas y minsculas, las funciones de la hoja de clculo no.
Escribiendo =msuno(5) tambin funciona.
Lamentablemente las funciones de GAS no pueden utilizar las funciones de las hojas de clculo Google. Spreadsheet
buscar
Classic
solamente para calcular un valor, y no puede, por ejemplo, obtener la seleccin actual, modificar el valor de otra celda,
agregar un men, insertar un grfico... Estas acciones quedan reservadas para secuencias de comando disparadas por
el usuario, y no dentro de frmulas.
Un dato til: cuando la funcin es llamada por una frmula, SpreadsheetApp.getActiveRange() representa la
celda que se est recalculando en lugar de la posicin del cursor.
Estas secuencias de comando se pueden disparar desde un men a medida, o haciendo clic en imgenes y grficos
insertados en la hoja de clculo. La siguiente funcin agrega un men para disparar otra funcin de GAS:
function onOpen() {
SpreadsheetApp.getActive().addMenu(
'Men agregado',
[{
name: 'Submen que dispara la funcin',
functionName: 'nombreDeLaFuncinALlamarConElMen'
}]
);
}
La funcin onOpen es una de las pocas que tiene un nombre predefinido. onOpen se ejecuta automticamente cada
vez que se abre la hoja de clculo. Como los menes se agregan a la interfaz de la hoja de clculo, y no a la hoja en s
misma, stos desaparecen al cerrarla. Por eso es usual utilizar onOpen para volver a agregar los menes cada vez que
se abre la hoja.
Las secuencias de comando de Google son muy poderosas, pero su dominio exige mucha lectura y prctica. Es
imposible abarcarlo completamente en este artculo, que sirve apenas de introduccin, pero est bien cubierto en una
serie de tutoriales de Google en ingls, con este punto de partida [https://developers.google.com/apps-
script/quickstart/macros?hl=es-ES] .
Ms sobre macros
Macros en Hojas de Clculo Google: rangos, hojas, planillas de clculo
[http://hojasdecalculogoogle.blogspot.com.ar/2013/06/macros-en-hojas-de-calculo-google_26.html]
Macros en las Hojas de Clculo Google: la interfaz de usuario [http://hojasdecalculogoogle.blogspot.com.ar/2013/06/macros-
en-las-hojas-de-calculo-google.html]
Ver comentarios
Classic
[http://web1170.p5.spacequadrat.de/wordpress/wp-content/uploads/2011/11/banner_edvausschuss.jpg]
Se trata de una funcin muy poderosa, pero muy poco intuitiva, que les resultar muy til solamente en hojas de clculo
realmente avanzadas (o complicadas). Este artculo asume que el lector est familiarizado con los trminos "funcin",
"rango", "argumento", "criterio" y "matriz". Advertidos, este artculo no es para cualquiera! :))
La "metafuncin" ARRAYFORMULA
ARRAYFORMULA no es una funcin en el sentido clsico, porque no evala sus argumentos para producir el resultado.
Para empezar, el argumento de ARRAYFORMULA no es un valor, sino una expresin, simple o compleja.
ARRAYFORMULA le dice a la hoja de clculo que debe evaluar esa expresin de otra manera, diferente a la
tradicional. Array significa matriz, algo muy similar a un rango (un rectngulo de filas y columnas, con valores en cada
casillero).
Se espera que las expresiones devuelvan algn resultado de uno de estos tipos:
numrico
texto
fecha o duracin
error
Todos estos resultados se pueden mostrar en una celda. Pero a veces resulta til que una expresin devuelva como
resultado una matriz, un rango entero de valores. Nada mejor que un ejemplo para aclarar, y nada mejor que el ejemplo
que se describe en otra entrada de este blog: SUMAR.SI.CONJUNTO
[http://hojasdecalculogoogle.blogspot.com.ar/2013/06/sumarsiconjunto.html] .
Un ejemplo explicado
Queremos contar la cantidad de valores menores a 10 en el rango C1:C20. Esto se logra con la siguiente frmula:
=COUNTIF(C1:C20;">=10")
Sin embargo, sabemos que la funcin countif no admite criterios complejos. Expandiendo el ejemplo anterior,
queremos contar la cantidad de filas de la 1 a la 20, con un valor menor a 10 en la columna C, y un valor mayor a 0 en la
columna B. No es posible hacerlo con countif.
=sum(
if(C1:C20<10;
if(B1:B20>0;
1;
0);0))
Se espera que los dos IF anidados devuelvan 1 por cada fila que cumpla las dos condiciones. La funcin agregadora
SUM sumara esos 1, y dara como resultado la cantidad que se busca. Se espera tambin que el primer argumento del
primer IF devuelva VERDADERO o FALSO. Pero qu resultado se puede esperar de la comparacin de un rango con
un valor numrico?
C1:C20<10
Es aqu donde entra en juego ARRAYFORMULA: le indica a la hoja de clculo que la expresin debe evaluarse como
una matriz, un array. La frmula reescrita como sigue, funciona tal como se esperaba:
=ArrayFormula(sum(
if(C1:C20<10;
if(B1:B20>0;
1;
0);0)))
if(C1:C20<10;
Classic
1;
0);0)
se evala 20 veces y devuelve una matriz columna con 20 valores 1 o 0: 1 si se cumplen ambos criterios, 0 si no. Se
trata de un "rango virtual", un rango que no existe en la hoja de clculo, no ocupa ninguna celda. Por eso no se lo llama
rango, sino matriz.
Luego sum recibe estos 20 valores como si fuera un rango, y los suma.
if(C1:C20<10;
if(B1:B20>0;
1;
0);0)
es una expresin matricial. Toda expresin matricial acepta un rango o una matriz donde normalmente se esperaba un
valor, y repite la evaluacin recorriendo cada uno de los valores de la matriz. Si hay varias matrices, la expresin entera
se evala recorriendo los valores correspondientes. Por esto, todos los rangos y matrices de una expresin
matricial deben tener el mismo tamao. El resultado ser una matriz del mismo tamao.
Funciones de agregacin
Algunas funciones toman un rango como argumento, y devuelven un valor. Es el caso de las funciones sum, y count,
por ejemplo. Se denominan funciones de agregacin, pueden recibir una expresin matricial como argumento, pero su
comportamiento no cambia con ARRAYFORMULA. Es decir,
=ArrayFormula(sum(C1:C20))
no evaluar 20 veces sum de una nica celda, sino que evala una vez sum para la matriz de 20 celdas.
Frmulas condicionales
ARRAYFORMULA es la manera de implementar cuentas y sumas condicionales para ms de un criterio. Por eso es
usual encontrarla con funciones IF anidadas, una por cada criterio. Al implementar frmulas matriciales con varios
criterios, uno podra considerar usar las funciones OR y AND, pero notar que no devuelven los resultados esperados.
Esto es porque OR y AND son funciones de agregacin, como SUM. No repiten la operacin OR (o AND) por cada
elemento de la matriz, sino que la evalan una nica vez para el conjunto de elementos, realizando una nica operacin
OR (o AND, se entiende) entre todos.
y
if( OR(C1:C20<10; B1:B20>0); VERDADERO; FALSO)
se implementa con
if( (C1:C20<10) + (B1:B20>0); VERDADERO; FALSO)
ARRAYFORMULA y CONTINUE
Usualmente ARRAYFORMULA se utiliza con una funcin de agregcin, que evala la matriz final y devuelve un
resultado en una sola celda. Pero qu pasa si no hay funcin de agregacin? Qu pasa si el resultado final es una
matriz? Qu pasa si a la frmula anterior le quitamos el SUM?
buscar
if(B1:B20>0;
Classic
0);0))
Esta frmula, sin SUM devuelve una matriz de 20 filas y 1 columna, con valores 1 y 0 dependiendo de la evaluacin de
cada fila. Como una matriz no entra en una celda, las hojas de clculo Google agregarn automticamente otras 19
frmulas en las 19 celdas de abajo, formando un rango de 20 celdas donde se muestra el resultado de la matriz.
=if(C1<10;
if(B1>0;
1;
0);0)
y copiarla para abajo. En cada celda los argumentos sern C2 y B2, C3 y B3, etctera; es decir, lo usual.
La primer diferencia reside en que la nica frmula matricial es la de la primera celda del rango. Supongamos que es
G30. El resto contendr la funcin CONTINUE:
=CONTINUE(G30; 2; 1)
que significa: "continuar mostrando los valores de la frmula matricial de G30, correspondiente a la coordenadas 2;1 de
la matriz".
Una ventaja de esta forma matricial, es que se puede modificar la frmula sin necesidad de copiarla hacia abajo.
A la segunda diferencia s se le puede encontrar alguna utilidad: si el tamao de la matriz cambia, las celdas con
CONTINUE se agregan o se eliminan automticamente. sta es la nica manera que tienen las Hojas de clculo
Google para extender frmulas automticamente, cuando se agregan datos. La cuestin no es trivial, y amerita un
artculo aparte.
Ver comentarios
Celda A1: Esta pelcula fue estrenada en 1992, pero sigue teniendo la vigencia de aqul momento
Se puede buscar "un nmero de cuatro cifras" para obtener el ao (1992) con la siguiente funcin:
=RegExExtract(A1; "\d{4}")
Esta funcin utiliza Expresiones regulares para realizar bsquedas inteligentes. Las expresiones regulares son patrones de
bsqueda muy flexibles. No son fciles de utilizar, pero s son muy potentes. No son un invento de Google, y se usan desde
hace aos en muchos lenguajes de programacin; por eso hay mucha documentacin en Internet.
En el ejemplo, el segundo argumento \d{4} es la expresin regular, que dice que busque 4 nmeros seguidos. Las expresiones
regulares utilizan una serie de cdigos para indicar qu se debe buscar. sa es la parte potente pero difcil de las expresiones
regulares.
Este enlace lleva a una pgina en ingls, que no es de Google, con una lista de los cdigos que se utilizan en expresiones
regulares [https://developer.mozilla.org/en-
US/docs/JavaScript/Reference/Global_Objects/RegExp#Special_characters_in_regular_expressions] .
Las tres funciones de las Hojas de Clculo Google que utilizan expresiones regulares son:
SUMAR.SI.CONJUNTO
Este nombre horripilante es la traduccin que eligi Microsoft para la funcin SUMIFS, una funcin no estndar, que si bien es
muy utilizada, no suele hallarse en otras aplicaciones de hojas de clculo que no sea Excel.
SUMAR.SI.CONJUNTO es una funcin que se agreg a Microsoft Excel hace unos aos, y como no est en versiones
anteriores de Excel todava se la considera una "funcin nueva". Esto es as porque Excel 97 marc un hito que estableci cul
es el "estndar" (adoptado por los desarrolladores) para las planillas de clculo, y todo lo que no estaba en esa versin se
considera "no estndar".
La funcin SUMAR.SI.CONJUNTO no brinda una capacidad nueva, sino una manera ms simple de hacer algo que ya se poda
hacer en versiones anteriores, y por eso esta funcin no suele ser incorporada fuera de Excel. Su sintxis es la siguiente:
=SUMAR.SI.CONJUNTO(
A1:A20;
B1:B20; ">0";
C1:C20; "<10"
)
En el primer rengln est el argumento del rango con los datos a sumar, y en los renglones siguientes pares de argumentos con
un rango a evaluar y la evaluacin propiamente dicha.
=ArrayFormula(sum(
if(C1:C20<10;
if(B1:B20>0;
A1:A20;
0);0)))
Se trata de una frmula matricial con varios IF anidados dentro del SUM. Como se ve, primero van los criterios y al final el rango
suma. Conviene analizarla bien para entenderla, y luego modificarla como uno quiera: es muy potente. Pero para el que no
puede dedicarle tiempo al tema, dejo tres ejemplos para un criterio, dos criterios y tres criterios, para copiar, pegar y editar los
rangos:
=ArrayFormula(sum(if(B1:B20>0;A1:A20;0)))
=ArrayFormula(sum(if(C1:C20<10;if(B1:B20>0;A1:A20;0);0)))
=ArrayFormula(sum(if(D1:D20=5;if(C1:C20<10;if(B1:B20>0;A1:A20;0);0);0)))
Otra manera un poco ms breve y simple de escribir (pero quizs ms lenta de ejecutar) es sta, siguiendo con los ejemplos
anteriores:
CONTAR.SI.CONJUNTO
Creo que es tan obvio, que evitar explicar para qu sirve esta funcin. Para CONTAR.SI.CONJUNTO se usa la misma frmula
indicada para SUMAR.SI.CONJUNTO, pero con un mnimo cambio: se reemplaza el rango de suma A1:A20 del ejemplo, por el
valor 1.
Y listo!
buscar
Classic
if(C1:C20<10;
if(B1:B20>0;
1;
0);0)))
PROMEDIO.SI.CONJUNTO
Adems de cambiar SUM por AVERAGE, hay que quitar los ceros finales de cada IF:
=ArrayFormula(average(
if(C1:C20<10;
if(B1:B20>0;
A1:A20;
);)))
Quiero ms
Quienes quieran profundizar, les recomiendo buscar el artculo sobre ARRAYFORMULA en la ayuda de Google Docs.
Tambin les advierto que no les conviene usar AND y OR dentro de los argumentos de estos IF, porque AND y OR, igual que
SUM, son funciones de agrupamiento, y tienen comportamiento no trivial dentro de ARRAYFORMULA.
Novedades 2014
SUMIFS es SUMAR.SI.CONJUNTO [http://hojasdecalculogoogle.blogspot.com.ar/2014/01/sumarsiconjunto-es-sumifs-en-la-
nueva.html]
Ver comentarios