You are on page 1of 54

buscar

Classic

Software de sistema de tickets - Zendesk.com.mx

11th January 2016 Importando tablas de texto y datos de otras fuentes


Todas las organizaciones usan bases de datos que exportan tablas como archivos de texto. La estructura de estas
tablas en esos archivos es diversa. Este artculo explora varias maneras de volcar esos datos en una hoja de clculo
Google.

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.

GAS: Google Apps Scripts (secuencias de comando)


Cuando todo lo anterior falla, no queda otra que programar. Programar es difcil y caro (en trminos de horas de
trabajo), y por eso conviene dedicarle un momento para decidir si vale la pena ponerse a programar. Los GAS se
utilizan para automatizar algn trabajo manual. Sin embargo, hay que tener en cuenta que desarrollar el GAS lleva
muchsimo ms trabajo que el que se va a evitar, y slo vale la pena cuando son reutilizados, cuando se ejecutan con
frecuencia. Raramente valga la pena elaborar un GAS para un trabajo de nica vez.

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:

1. Pegar el texto en una celda de una Hoja de Clculo Google (HCG)


2. Pegar el texto en un cuadro de texto en un panel lateral de HCG
3. Pegar el texto en un Documento de Google (Docs)
4. Subir el archivo de texto a Google Drive
Una cuestin importante a tener en cuenta al pegar texto es su codificacin. La codificacin atae a los caracteres
buscar

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.

Pegar el texto en una celda de HCG

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.

GAS vuelca el contenido de la celda de una variable string de la siguiente manera:

var miTexto = SpreadsheetApp.getActiveSpreadsheet()


.getSheet('Hoja 1').getRange('A1').getValue();

Alternativamente y mucho ms recomendable: usar rangos con nombre, en este caso la celda "entradaDeTexto"

var miTexto = SpreadsheetApp.getActiveSpreadsheet()


.getRangeByName('entradaDeTexto').getValue();

Pegar el texto en un cuadro de texto de un panel (sidebar)

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:

// Cuando cuadro es INPUT


var cuadro = document.getQuerySelector('input');
var texto = cuadro.value;

// Cuando cuadro es TEXTAREA


var cuadro = document.getQuerySelector('textarea');
texto = cuadro.textContent;

// Cuando cuadro es DIV o una de otras muchas etiquetas posibles


var cuadro = document.getQuerySelector('div');
texto = cuadro.innerText;

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] ]

Pegar el texto en un Docs

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:

var miTexto = DocumentApp.openById(docId).getBody().getText();

Hay que conocer el ID del documento. Alternativamente se puede usar openByUrl(docUrl) en lugar de openById
(docId).
buscar

Classic

Archivo de texto en Drive

La manera ms directa de abrir un archivo de texto subido a Drive es por medio de su Id:

var miTexto = DriveApp.getFileById(archivoId).getBlob().getDataAsString(charset);

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.

Limitaciones de procesamiento de GAS


El tiempo de ejecucin de GAS est limitada a unos pocos minutos, lo que empeora adems si se considera que su
ejecucin no es rpida: es bastante lenta.

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.

Adems, hay tres maneras de superar esta limitacin de procesamiento:

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] .

Publicado 11th January 2016 por Alejandro Silvestri

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.

No dejes de comentar y compartir tu experiencia en la comunidad de Hojas de Clculo Google


[https://plus.google.com/u/0/communities/117381564739239305447] .

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.

HTML para el panel

[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:

1. Crear una hoja de clculo nueva


2. Abrir el editor de secuencias de comando (men Herramientas, Editor de secuencias de comando...)
3. Crear el archivo panel.html (men Archivo, Nuevo, Archivo HTML)
4. En el archivo Cdigo.gs (o en cualquier otro) borrar todo y pegar lo siguiente:

function onOpen(){
SpreadsheetApp.getUi().createMenu('Mi panel')
.addItem('Mostrar panel', 'mostrarPanel')
.addToUi();
}
buscar
.showSidebar(

Classic

.setSandboxMode(HtmlService.SandboxMode.IFRAME)
);
}

Luego de guardar, volviendo a la hoja de clculo:

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.

Sin estilos, los paneles son feos:

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:

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">

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.

La etiqueta INPUT representa


diversos elementos, segn su
atributo type:
buscar
<input type="text">
Classic
<input
type="radio"> produce un
crculo cliqueable para elegir
una de variar opciones
<input
type="checkbox"> produc
e un cuadrito para tildar
Nota: Si bien el panel no enviar
ningn formulario, conviene
[http://www.i3s.unice.fr/~comet/Images/html.png]
encerrar todos los input en una
etiqueta <form>, y dejar los botones fuera de ella. De otro modo es posible el navegador interprete la pulsacin de un
botn como la orden para enviar el formulario y el contenido del panel desaparecer. Esta precaucin evita disparar un
comportamiento imprevisto del sandbox.

La etiqueta input tiene otros atributos relevantes:


name: un nombre cualquiera. Sirve para agrupar varios radio buttons (todos con el mismo name). Tambin facilita
el acceso al elemento va document.forms[0].nameDelInput
value: valor precargado en el casillero
Finalmente, cada etiqueta input suele ir acompaada de una etiqueta label, que proporciona el texto con el ttulo o
explicacin del campo input. En este caso cada etiqueta input debe contener un atributo id nico, y cada etiqueta label
debe tener un atributo for con el valor del id del elemento input relacionado.

Por lo tanto, la estructura general para cada campo de la interfaz de usuario es la siguiente:

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">

<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>

<button class="blue" id="boton">Botn</button>

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);

function receptor(resultado){...procesar el resultado de la funcin GAS...}

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).

Completando el ejemplo anterior:

<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:

var miElemento = document.getElementsById('IdDelElemento');

Una lnea de este tipo para cada elemento.

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]

Publicado 18th February 2015 por Alejandro Silvestri

3 Ver comentarios

19th December 2014 Scripts en celdas: funciones de Google Apps Scripts


evaluadas en celdas de Hojas de Clculo Google

[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.

No dejes de comentar y compartir tu experiencia en la comunidad de Hojas de Clculo Google


[https://plus.google.com/u/0/communities/117381564739239305447] .

[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

Cundo se recalculan las funciones GAS


Classic

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

ABC: cmo escribir una funcin personalizada


Las funciones personalizadas (al igual que todo GAS) se programan en javascript. Aqu hay un excelente curso en
castellano para aprender javascript [http://www.codecademy.com/tracks/javascript] .

El men Herramientas, Editor de secuencias de comando... abre la herramienta "editor de secuencias de comando".
En este sentido, es muy coherente.

Para este ejemplo, el paso


siguiente es elegir "proyecto en
blanco", y se abre el editor.
Luego copiar y pegar en el
editor:

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)

Me abstengo de predecir el resultado.

Nombres de las funciones


En las frmulas se pueden usar todas las funciones globales definidas en el editor de secuencias de comando de esa
HCG. Para usar alguna funcin definida en otra HCG, lo ms fcil es copiar el cdigo desde el editor de una HCG al
editor de la otra.
Al asomarse al mundo [http://4.bp.blogspot.com/-5WoRQdxWBm0/U5Tb0gBBDhI/AAAAAAAAAng/mYh-fj17tUY/s1600/funcion.gif]
de los scripts, hay que
tener bien presente que los scripts tienen una sintaxis muy diferente a las frmulas de hojas de clculo. GAS se escribe
en javascript, las frmulas se escriben usando la sintxis estndar de hojas de clculo (establecida y estandarizada por
OpenOffice y liberada bajo licencia pblica general GNU).

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.

Estos dos ejemplos arrojan el mismo resultado:

=DUPLICAR(7)
buscar

=duplicar(7)
Classic

Por lo tanto no hace falta preocuparse por las maysculas y minsculas.

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

Para el que quiera complicarse

Cabe mencionar que esto es relativamente


nuevo. Hasta hace poco HCG no usaba el
objeto Date, y el manejo de fechas era
bastante confuso. Antes, pasar una fecha
produca un number en GAS, ahora produce
un objeto Date. Antes, devolver la string
'17/12/14' produca una fecha, ahora produce
un texto.
[http://cdns2.freepik.com/foto-gratis/rabia_2831837.jpg]
Generalizando, antes los tipos devueltos por las funciones de GAS se interpretaban en la HCG segn el contenido de
texto (no quiero abundar en detalles sobre algo que ya no existe), ahora el tipo se corresponde con el tipo del valor
retornado. Esto tambin es un poco confuso porque javascript no maneja tipos (pero el compilador s, y por lo tanto los
tipos son tcitos).

Rangos como argumentos


Cuando se pasa un rango como argumento, la funcin GAS recibe un argumento del tipo Array, cuyos valores
corresponden a los valores de las celdas.

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:

[["A1"], ["A2"], ["A3"]]

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})

=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,

=MIFUNCION({{2; 3; 5}; {7; 11;13}})

recibir como argumento

[[2, 3, 5], [7, 11,13]]

[http://www.rdiplastics.com/wp-content/uploads/moldes-3.jpg]

Matrices como resultados


Qu pasa cuando una funcin de GAS devuelve un objeto Array como resultado? El resultado se vuelca sobre un
rango de iguales dimensiones.

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

El lado oscuro de las fechas

[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.

Algunas limitaciones de las funciones GAS


Regla
de
oro:
usar
las
funcio
nes
perso
naliza
das [http://www.signovial.pe/blog/wp-content/uploads/2014/07/senal-pare.jpg]
para
calcular valores basados exclusivamente en los argumentos que recibe. Si vas a usar las funciones
de otra manera, te conviene conocer las limitaciones que tienen antes de romperte la cabeza adivinando
por qu no funcionan.

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:

1. Las funciones no pueden escribir. No pueden modificar el contenido de otra celda


2. No pueden usar APIs que requieran permisos. El nico permiso que tienen es el de acceder a la propia hoja de
buscar

4. No admite argumentos no determinsticos: no se pueden usar NOW() o RAND() como argumentos


Classic

En los dos primeros casos la frmula arroja un error bastante elocuente como ste:

"ERROR: No cuenta con el permiso para llamar a setValue (lnea 15)"

En el caso 4 la celda mostrar la leyenda "Loading..." para siempre. Un mensaje que desafa la intuicin.

Qu es una funcin determinstica?


Es aqulla cuyo resultado depende exclusivamente de sus argumentos. La mayora de las funciones son
determinsticas, pero algunas no, por ejemplo NOW(), que devuelve un valor diferente cada vez que se
calcula.

-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,

Math.random() genera nmeros aleatorios

Date.now() devuelve la fecha en milisegundos

Range.getValue() obtiene el valor de una celda

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:

/**

* Multiplica el valor por 2.

* @param {number} input Valor a duplicar.

* @return El doble de input.

* @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.

Sintaxis muy breve:


@return Comentario a mostrar, indicando qu devuelve la funcin.
@param {tipo de dato} nombreDelArgumento Comentario sobre el argumento.
Si hay varios argumentos se usan varias clusulas @param , una para cada uno. Tipos de datos hay
muchos en JDoc, algunos son:

{number}

{string}

{*} para cualquier tipo de dato

{number[]} para un vector de valores numricos

{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:

// Devuelve el nombre de la hoja


function hoja() {
return SpreadsheetApp.getActiveSheet().getName();
}

// Devuelve la "key" o identificador de la hoja de clculo


function key(){
return SpreadsheetApp.getActiveSpreadsheet().getId();
}

// Devuelve el rango de la celda donde se evala la frmula


var estaCelda = SpreadsheetApp.getActiveRange();

// Obtiene el valor de un rango con nombre


var rango = SpreadhsheetApp.getActive().getRangeByName('nombre del rango').getValue();

[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

Publicado 19th December 2014 por Alejandro Silvestri

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.

Una visin panormica


Quien haya empezado escribiendo macros para hojas de clculo puede sentirse confundido a la hora de querer hacer
algo fuera de las hojas de clculo. Para poner orden, nada mejor que una visin de "bosque".

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

Documentacin sobre container bound scripts [https://developers.google.com/apps-script/scripts_containers?hl=es-ES]

Hay tres tipos de container bound scripts que conviene distinguir:


1. Macros de un documento
2. Complementos de Google Docs (Add-on)
3. Funciones personalizadas para hojas de clculo Google (spreadsheeet custom functions)

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.

Ms informacin sobre el desarrollo de complementos [https://developers.google.com/apps-script/quickstart/docs?hl=es-ES]

Funciones personalizadas (spreasheet custom functions)

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.

Hay tres tipos de web apps:


Web app propiamente dicha
Content service
Google Sites gadget
En rigor los tres tipos son web app, pero los ltimos dos son casos especficos de web app. El modelo de GAS es un
buscar

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.

Google Sites gadget

Se trata de una web app con una especificacin adicional para que pueda ser incorporada como gadget dentro de una
pgina de Google Sites.

Ms informacin sobre gadget para Google Sites [https://developers.google.com/apps-script/execution_gadgets?hl=es-ES]

Seguinos en esta comunidad [https://plus.google.com/u/0/communities/117381564739239305447]

Publicado 7th July 2014 por Alejandro Silvestri

4 Ver comentarios

20th January 2014 Evolucin de las hojas de clculo Google


Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

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.

La versin original era igual a la de testeo Google Labs Spreadsheets.


buscar

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]

Quisiera ser como Excel


Esta etapa de la evolucin de las HCG estuvo marcada por la incorporacin de funciones y comandos de Excel. En
este sentido, HCG era una versin liviana y limitada de Excel.

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

El alineamiento esttico con el resto de los productos de Google, cimentado en HTML5


Fuerte nfasis en la colaboracin, incorporando chat y lista de usuarios activos

[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.

Por qu no lo hicieron antes?

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.

No slo modificar sin conexin

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.

Cmo (creo que) sigue?

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.

Me parece ver dos lneas evolutivas:


La tradicional, que se agota: se seguirn incorporando funciones y comandos de Excel, se seguirn sumando
formatos de archivos para convertir
La integracin con Google Plus: los cambios en el aspecto y funcionalidad de Google Plus llegarn tambin a HCG;
la colaboracin con otros usuarios adoptar la forma de comunicacin de G+, se integrarn crculos, se facilitar la
difusin de HCG en G+, y todo lo que te puedas imaginar de esta yunta
Entre otras cosas, est pendiente la posibilidad de compartir las HCG con los crculos de Google Plus; de dar permisos
a usuarios de Google Plus sin necesidad de conocer o dar a conocer el usuario de GMail. En esta lnea algo ya se est
moviendo en GMail.

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.

Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

Publicado 20th January 2014 por Alejandro Silvestri

4 Ver comentarios

SUMAR.SI.CONJUNTO es SUMIFS en la nueva versin de


13th January 2014
Hojas de Clculo Google 2014
A fines de 2013 Google liber la versin beta de las nuevas Hojas de Clculo Google (HCG), que se pueden activar as
[https://support.google.com/drive/answer/3541068] . Espero que se lance definitivamente a principios de 2014. Esta nueva
versin incorpora (al fin) la funcin SUMIFS, que en Excel en castellano se llama SUMAR.SI.CONJUNTO.

[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

SUMIFS(A1:A10; B1:B10; ">20"; C1:C10; "<30")


Classic

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.

La pgina de ayuda de SUMIFS [https://support.google.com/drive/answer/3238496] describe la sintaxis. Ojo, porque los


ejemplos estn para la configuracin regional en ingls, y para probarlos hay que reemplazar las comas separadoras de
argumentos por punto y coma.

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] .

As como existe SUMIFS, tambin existen:

COUNTIFS, equivalente a CONTAR.SI.CONJUNTO, para contar segn varios criterios


AVERAGEIFS, equivalente a PROMEDIO.SI.CONJUNTO, para promediar segn varios criterios

Comunidad HCG

Unite a la comunidad de Hojas de Clculo Google en castellano


[https://plus.google.com/u/0/communities/117381564739239305447] para ms artculos como ste.

Publicado 13th January 2014 por Alejandro Silvestri

3 Ver comentarios

Software de support Atencin ms sencilla y eficaz. Prueba gratuita de


desk 30 das. Comience ahora.

31st October 2013 Cuadros de dilogo y formularios con hojas de clculo?


Es un lugar comn imaginar las hojas de clculo como una manera prctica de hacer formularios,
con campos, para que otros usuarios lo completen. Dejando volar un poco la imaginacin, algunos intentaron hacer un
sistema cotizacin web con una hoja de clculo, para poner en su sitio web y que los clientes interacten usando listas
desplegables y obtengan su presupuesto.

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.

Por qu no hacer un formulario con una hoja de clculo?


El cuadriculado de una hoja de clculo es muy verstil, y es muy fcil confeccionar un formulario, escribiendo preguntas
en unas celdas y ponindole bordes a otras donde queremos la respuesta. sa es la manera en que nacen la mayora
de los sistemas en las empresas.

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.

Sin embargo tiene varias limitaciones:


No son programables, no se les pueden adosar secuencias de comando
Los tipos de respuestas son limitados, no admite, por ejemplo, campos numricos
De la misma manera, no permite un control fino sobre las respuestas de texto. Por ejemplo, no se puede verificar si
se escribi una direccin de email vlida
El formulario no es interactivo. Por ejemplo, no puede calcular y mostrar un precio en base a los datos aportados
Google Forms tiene muchas limitaciones de formato (colores e imgenes). Permite elegir un formato prediseado de
una lista corta, y nada ms. Esto es as para evitar que se use esa herramienta para phishing u ni para otros engaos
cibernticos.

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.

Insistiendo con usar una hoja para dibujar un formulario


Al mejor estilo Excel, podemos usar una hoja de clculo para darle forma a un formulario, y unas pocas lneas de cdigo
en un botn, para volcar su contenido en una tabla de datos en otra hoja.

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.

The hard way


La nica manera de hacer un cuadro de dilogo o un formulario con mayor nivel de personalizacin en una HCG, es
programarlo con Google Apps Script (GAS).

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.

Publicado 31st October 2013 por Alejandro Silvestri

2 Ver comentarios

30th July 2013 Funciones especiales

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.

Insertar una imagen con una frmula


La funcin IMAGE(URL, opcin) inserta una imagen en la celda donde se introduce la frmula. Basta indicar la
URL de la imagen (la direccin web, como http://www.efunda.com/math/bessel/images/BesselJPlot.gif
[http://www.efunda.com/math/bessel/images/BesselJPlot.gif] ). Usualmente se combinan varias celdas para que se vea la
imagen completa.

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 inserta una imagen dentro de una celda.

=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.

Insertar un grfico en miniatura en una sola celda


La funcin SPARKLINE(datos, opciones) lo hace: crea un grfico con los datos proporcionados, que se muestra dentro
de la celda. El argumento opcional opciones permite elegir el tipo de grfico y otras caractersticas. Es sper simple de
usar, y el hecho de usarse como frmula, le permite copiarse y pegarse para generar multitud de grficos. Es usual
crear un grfico de stos para cada fila de una tabla.

Ms info y ejemplos [https://support.google.com/drive/answer/3093289] (en ingls).

Importar datos desde pginas web


IMPORTHTML(URL, etiqueta, ndice) es una funcin impresionante. Simplemente vuelca en la hoja de clculo el
contenido de una tabla de cualquier pgina web. El siguiente ejemplo devuelve una bsqueda de Google de los
trminos de la celda A1:

=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:

ImportFeed(URL; query; headers; numItems)

Finalmente, para casos ms selectos, existe la funcin IMPORTXML, cuyo nombre lo dice todo.

Importar un archivo CSV


Un archivo CSV es un archivo que contiene una tabla en formato de texto, separando las columnas por comas. Se
puede importar de varias maneras. Una es subir el archivo CSV a Google Drive y convertirlo a hoja de clculo Google.
Otra consiste en usar frmulas como se muestra en este otro artculo
[http://hojasdecalculogoogle.blogspot.com.ar/2013/07/limpiando-los-textos-separando-en.html] . La otra manera es la que vengo
a comentar aqu, usando la funcin IMPORTDATA(URL).
El archivo CSV debe estar accesible en Internet va la url indicada en el argumento. Una manera de poner su propio
buscar

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...

Publicado 30th July 2013 por Alejandro Silvestri

Ver comentarios

Limpiando los textos: Separando en columnas, extrayendo la


29th July 2013
parte que sirve
Un uso muy [http://www.macstore-mx.net/wp-content/uploads2/2010/06/Captura-de-pantalla-2010-06-29-a-las-9.57.13-AM.png]
difundido de las
hojas de clculo es el acondicionamiento o fomateo del texto, que proviene de algn sistema o de cualquier "fuente de
informacin", y hay que manipularlo para subirlo en otro sistema. Es muy comn obtener tablas de datos bajo la forma
de texto separado por comas, o encolumnado con espacios intercalados, y a veces no se consigue abrir como hoja de
clculo de forma automtica, y hace falta separar los datos a mano.

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.

Veamos un ejemplo con un texto de cuatro columnas, de manera que:


la primer columna abarca 15 caracteres
la segunda, 10
la tercera y la cuarta, 5 cada una
El texto de las dos primeras filas, en las celdas A2 y A3, es:

A2)Nombre Apellido Edad Nac.


A3)Josefa Manol 83 USA

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:

B2)=mid($A2; B$1; C$1-B$1)

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

La frmula volcar el resultado hacia las celdas de la derecha automticamente.


No hace falta como en el caso anterior poner los valores en la fila uno. Y como se puede apreciar, esta frmula ya
contiene los valores de la cantidad de caracteres que corresponde a cada columna.

Para generalizar, por cada columna se agrega el cdigo:

(.{#})

reemplazando # por la cantidad de caracteres de esa columna.

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:

function separarH(texto, separador){


return texto.split(separador);
}

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:

B1)=regexextract(A2; rept("(.*),"; 100 - 1) & "(.*)")

Separar direcciones de email


Es usual copiar listas de distribuciones del campo PARA de un correo electrnico, para luego hacer una lista en una
hoja de clculo. El primero problema es que todas las direcciones de correo se pegan en una nica celda, produciendo
algo parecido a esto, pero ms largo:

"Pepita Manuela" <pepman@gmail.com>,"Manolo Jos" <manojo@hotmail.com>,"Josefa Manol"


<jonol@usa.gov>

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; ",")

Destripar direcciones de email


GMail usa el formato de direcciones "nombre" <direccin>. Suele ser necesario extraer nombres y direcciones de
correo en columnas separadas.

La manera clsica con MID y SEARCH

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:

A1)"Pepita Manuela" <pepman@gmail.com>


B1)=mid(A1; 2; search(""""; A1; 3)-2)
C1)=mid(A1; search("<"; A1)+1; search(">"; A1)-search("<"; A1)-1)

La solucin nueva

A1)"Pepita Manuela" <pepman@gmail.com>


B1)=regextract(A1; """(.*)""")
C1)=regextract(A1; "<(.*)>")

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] .

Unir direcciones de email


La inversa es tambin es bastante comn. Teniendo una columna con los nombres y otra con las direcciones de email,
se hace necesario concatenarlas todas en un nico texto que se pueda copiar y pegar en el campo PARA de un correo
electrnico. Este ejemplo es para GMail, que acepta el formato "nombre" <direccin> .

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:

=arrayformula(join(","; """" &A1:A10 & """ <" &B1:B10 & ">"))

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.

Ms detalles sobre las frmulas matriciales en este otro artculo


[http://hojasdecalculogoogle.blogspot.com.ar/2013/06/liberando-la-energia-del-atomo-la.html?view=sidebar] .
buscar

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.

Publicado 29th July 2013 por Alejandro Silvestri

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.

La seguridad ante todo


La mayor virtud de las hojas de clculo Google es su facilidad para compartir y colaborar. Esta caracterstica sera el
camino preferido para virus y troyanos, si Google no fuera estricto con la seguridad de sus productos. Las limitaciones
que sufren los scripts para agregar elementos a la pantalla del usuario se deben a que Google quiere evitar que los
desarrolladores abusen de los usuarios. Con esto en mente, ser ms fcil entender por qu las cosas son como son

Yo en Excel esto lo poda hacer


Lo que llamamos macros, son secuencias de comando contenidas en una hoja de clculo Google. Estas secuencias
pueden interactuar muchos productos de Google (Google Docs, Drive, GMail, Calendar...) para acceder y manipular su
contenido, pero estn muy limitados para interactuar con la pgina web que el usuario tiene abierta.

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

Por otro lado, los scripts no pueden:


Cambiar el contenido ni la posicin de los menes predeterminados
Agregar botones a la barra de herramientas
Agregar controles a la hoja de clculo (es decir, zonas interactivas)
Usar el men
Usar botones de la barra de herramientas
Agregar menes generales que se presenten en todas las hojas de clculo
Abrir otra hoja de clculo en la pestaa actual, ni en una pestaa nueva
En rigor, no pueden navegar nada
No tienen acceso a la pgina web
No tienen acceso al DOM de la interfaz de la hoja de clculo
Por ejemplo, no pueden insertar elementos HTML

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.

Mensajes y entrada de datos

[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.

Ambos mtodos son muy limitados, y por ejemplo:


El mensaje que muestran en la ventana no tiene formato y es de un solo prrafo: ignoran los saltos de lnea.
inputBox no admite un texto predeterminado. La casilla de texto que el usuario debe completar siempre aparece
vaca.
No hay manera de controlar el tamao ni la posicin ni el formato de la ventanita.

Sirven para su propsito especfico, y no admite usos no ortodoxos.

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:

var nombre = Browser.inputBox('Cmo te llams?');

Cuadros de dilogo y barras laterales: HTML Services


Un
cuadro
de
dilogo
es una
ventana
flotante
sobre la
hoja de
clculo.
No es
una
ventana
del
navegad
or, y
slo
[http://holageek.com/v1/wp-content/uploads/2011/07/html-full.jpeg]
puede
estar en la pgina web de la hoja de clculo. El usuario no puede continuar usando la hoja de clculo mientras tenga la
ventana abierta.

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.

Principales restricciones de HTML Services


A modo de resea, listo algunas restricciones: [https://code.google.com/p/google-caja/logo]
Usa el modo estricto de HTML, lo que significa que no debe contener errores (por ejemplo, tags inexistentes, o que
se abren y no se cierran)
No admite cdigo javascript escrito en el propio HTML: los tags SCRIPT deben usar SRC="nombre de archivo.js"
Tiene limitaciones para agregar tags SCRIPT de forma dinmica por cdigo, y no admite JSONP
No admite el uso de IFRAME
Al cdigo javascript no se le permite acceder al navegador, solamente al DOM del propio HTML
No admite la fuincin eval
Para saber ms, les recomiendo la descripcin completa de Caja Sanitization [https://developers.google.com/apps-
script/guides/html-service-caja?hl=es-ES] (en ingls).

Publicado 27th June 2013 por Alejandro Silvestri

7 Ver comentarios

Macros en Hojas de Clculo Google: rangos, hojas, planillas de


26th June 2013
clculo

Las hojas de clculo


Google permite acceder
a sus hojas y celdas de
forma programtica, por
medio del lenguaje
Google Apps Script. La
forma en que se
organizan los objetos es
[http://www.fondos10.net/wp-content/uploads/2010/06/Hoja-verde.jpg]
similar a la que
implementa Excel para sus macros de Visual
Basic, pero puede resultar un poco confusa
para el recin llegado, aun cuando tenga
experiencia usando hojas de clculo e incluso
usando lenguajes de programacin.
Continuando con mi artculo anterior buscar
[http://hojasdecalculogoogle.blogspot.com.ar/2013/
06/macros-en-hojas-de-calculo-google.html] , en
Classic ste pasearemos por los objetos principales
de Spreadsheet Services
[https://developers.google.com/apps-
script/reference/spreadsheet/?hl=es-ES] ,
mostrando la manera en que se combinan
para acceder a los datos.

[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.

Tampoco se llaman macros, sino secuencias de comando, o scripts.

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.

Los servicios inmediatos de SpreadsheetApp


Las Spreadsheet Services de Google Apps Scripts presentan los elementos que constituyen una hoja de clculo, en
forma de objetos de javascript. La clase SpreadsheetApp es la puerta de entrada a las hojas de clculo Google. La
clase tiene algunos mtodos muy cmodos para acceder a la hoja de clculo abierta:

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)

Abre otra hoja de clculo. Otros mtodos: .open y .openById

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.

Escarbando hasta llegar al rango


Para poner en una frmula alguna referencia a otra celda, se utiliza la sintaxis del ejemplo:

'Hoja 1' ! $A$5:B10

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)

que se interpreta mejor escrito en varias lneas:

// La "spreadsheet" activa, desde cuyo men se dispar el script


var hojaDeClculo = SpreadsheetApp.getActive();
// La hoja llamada Hoja 1.
.getSheetByName('Hoja 1'); buscar

Classic

var rango = hoja1.getRange(5, 1, 6, 2);

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:

var rango = hoja1.getRange('A5:B10');

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:

var rango = hoja1.getRange('Hoja 2!A5:B10');

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:

var rango = hojaDeClculo.getRange('Hoja 2!A5:B10');

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.

Para dejar clara la comparacin:


Referencia en una frmula: 'Hoja 2'!A5:B10
Referencia en un texto de javascript: Hoja 2!A5:B10

Finalmente, tambin se puede obtener el rango por su nombre de intervalo (suponiendo que se le asign un nombre)
con:

var rango = SpreadsheetApp.getActive().getRangeByName("miCelda");

Escarbando ms para llegar al contenido de una celda


Como la celda es solamente un caso particular de rango, caben distinguir dos maneras principales para leer o escribir
un rango:

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:

[ [fila 1 y columna 1 , fila 1 y columna 2] , [fila 2 y columna 1 , fila 2 y columna 2] ]


Es muy importante tener en cuenta que setValues exige que el tamao de la matriz sea exactamente igual al tamao del
buscar

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);

Cuando de frmulas se trata

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);

Notacin A1 y nmero de fila y columna


Spreadsheet Services admite rangos en formato A1, o indicando la hoja, la posicin de la fila, la columna, el ancho y el
alto del rango. Estos ejemplos demuestran cmo convertir de una notacin a la otra:

Convertir de notacin A1 a nmeros

var rango = SpreadsheetApp.getActve().getRange('Hoja 1!B5:G10');

var nombreDeLaHoja = rango.getSheet().getName();


var filaInicial = rango.getRow();
var columnaInicial = rango.getColumn();
var alto = rango.getNumRows();
var ancho = rango.getNumColumns();

Convertir de nmeros a notacin A1

var rango = SpreadsheetApp.getActve()


.getSheetByName(nombreDeLaHoja)
.getRange(
filaInicial,
columnaInicial,
alto,
ancho
);

var notacinA1 = "'" + nombreDeLaHoja + "'!"


+ rango.getA1Notation();

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.

Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

Publicado 26th June 2013 por Alejandro Silvestri

Ver comentarios
Qu puedo hacer con mi tabla de datos buscar

Classic

Estrategias para la confeccin de tablas de datos


Una tabla de datos no es ms que un cuadriculado rectangular con texto, nmeros o fechas en sus casilleros, pero con
una peculiaridad: est destinada a ser interpretada por frmulas de hoja de clculo. Por eso, atenindose a ciertas
reglas sencillas, se potencia su explotacin.

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.

La tabla que crece

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 )

Bsqueda y alternativas a VLOOKUP

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:

=OFFSET(rango de resultado; MATCH( valor buscado; rango de bsqueda; 0)-1; 0; 1; 1)

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.

Generando minitablas de presentacin

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:

=QUERY(Tabla!A:F; "select A, C where E='Pepito SRL' ")


buscar

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

Acceder desde otra hoja de clculo

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:

Frmula original de la fila 2:


=IF(A2>B2; A2; B2)

Frmula reescrita para que crezca sola:


=ARRAYFORMULA( IF(A:A>B:B; A:A; B:B) )

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.

Google Apps Script

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()

Por otro lado, Google destaca la librera ObjService [https://sites.google.com/site/scriptsexamples/custom-methods/gs-objects]


de James Ferreira, que convierte una tabla en objetos de javascript y facilita su manipulacin programtica.

Acceso automtico por Internet

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.

No quiero seguir extendiendo este artculo, le dedicar uno completo a la documentacin.

Publicado 14th June 2013 por Alejandro Silvestri

Ver comentarios

13th June 2013 Tu base de datos en Hojas de Clculo Google

[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.

Las bases de datos de menor a mayor

[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.

Descripcin de la tabla de datos


Conviene siempre crear una hoja para "documentar" la tabla, para que otros puedan interpretarla. La documentacin
consiste simplemente en describir los siguiente:
Qu contiene la tabla. Suele ser un listado de "algo", que hay que definir.
Qu significa cada fila. Por ejemplo, en un listado de facturacin, cada fila corresponde a una factura.. En una lista
de clientes, cada fila corresponde a datos de un cliente. Si ms de una fila corresponde al mismo cliente, entonces
no es una lista de clientes, y falta identificar qu significa cada fila.
Qu significa cada columna. Los encabezados suelen ser elocuentes, pero tambin suelen estar restringidos en
longitud, y muchas veces su significado depende del contexto y se presta a confusiones. Por eso conviene aclarar
con lujo de detalles qu significa cada encabezado.

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:

QUERY(rango de la tabla de datos; texto de la consulta)

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().

La lista completa de clusulas SQL [https://developers.google.com/chart/interactive/docs/querylanguage#Language_Clauses]


admitidas en QUERY est en ingls.

Publicado 13th June 2013 por Alejandro Silvestri

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:

=['C:\Documents and Settings\All Users\Documentos\hoja con datos.xls']Tabla!A1

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("0AtqguwfEft7udE5oNlVCM2tNeWRYdFExSzR3bzJedVE" , "Hoja 2!A23")

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".

Otras maneras de importar datos


Google proporciona varias funciones propietarias para importar datos de Internet o de cualquier servidor que utilice los
protocolos estndares:
IMPORTHTML, importa el contenido de una tabla de una pgina web. Hay que indicar la direccin de la pgina web, y un
nmero: el ndice de tabla, para sealar qu tabla se requiere cuando la pgina tiene varias. Para encontrar el ndice,
conviene probar nmeros correlativos a partir de cero.
IMPORTDATA, importa el contenido de un archivo con formato de tabla CSV o TSV, disponible en una direccin web.
IMPORTXML, importa una tabla XML
IMPORTFEED, importa un feed atom, quizs otros formatos tambin

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)

Se puede importar un rango de un archivo Excel?

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

10th June 2013 Macros en Hojas de Clculo Google


Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

[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:

Programas, que se ejecutan desde un men


Funciones, para usar en frmulas

El lenguaje Google App Script

[http://www.devfest.at/image/ahRzfmRldmZlc3QtYXQtaGVsbXV0aHISCxILU2Vzc2lvblRhbGsYkU4M]Mientras las macros de


Excel se escriben en Visual
Basic, basado en BASIC, las secuencias de comando de Google se escriben en Google Apps Script
[https://developers.google.com/apps-script/overview?hl=es-ES] , que est basado en javascript, el lenguaje estndar de las
pginas web, y el ms popular del mundo.

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.

Spreadsheet Services: la API de las hojas de clculo


El punto de entrada a las hojas de clculo es el objeto SpreadsheetApp, que est siempre disponible (no hace falta
ninguna preparacin especial para cargarlo). A partir de aqu se puede acceder a la mayora de los aspectos de una
hoja de clculo. Las partes de una hoja de clculo est ordenada de la siguiente manera:
SpreadsheetApp [https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=es-ES]
representa la aplicacin de hojas de clculo. Para comparar, existen tambin GMailApp, DriveApp, MapsApp,
CalendarApp... creo que se entiende. Entre otras cosas permite acceder a cualquier hoja de clculo Google,
est abierta o no.
Spreadsheet [https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet.html?hl=es-ES]
buscar

Classic
SpreadsheetApp.getActive()

Sheet [https://developers.google.com/apps-script/reference/spreadsheet/sheet.html?hl=es-ES] representa una hoja


dentro de la hoja de clculo. Ntese que la jerga es equvoca, porque denomina "hoja" tanto al archivo en su
conjunto como a cada hoja dentro de l, como el pie de Cortzar [http://www.literatura.org/Cortazar/Instrucciones.html] .
En ingls se denominan spreadsheet y sheet respectivamente. Dos maneras de acceder a una hoja (entre otras):
SpreadsheetApp.getActiveSheet()
SpreadsheetApp.getActive().getSheetByName('Hoja1')
Estas dos maneras se usan en los ejemplos que siguen
Range [https://developers.google.com/apps-script/reference/spreadsheet/range.html?hl=es-ES] es la nica manera de
acceder a las celdas de una hoja. Representa un rango, es decir una matriz rectangular de celdas, en una hoja
determinada. Para trabajar con una sola celda, se trabaja con un rango de 1x1. Ejemplos para obtener un rango, y
trabajar con su contenido
SpreadsheetApp.getActiveRange()
devuelve el rango de la seleccin actual. Normalmente corresponde a la posicin del cursor, si no hay un
rango mayor seleccionado.
SpreadsheetApp.getActive().getSheetByName('Hoja 1').getRange('A1')

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()

devuelve el valor del contenido de la celda superior izquierda del rango


SpreadsheetApp.getActive().getRange('Hoja 1!A1').setValue('Nuevo contenido de la
celda')

escribe el contenido de la celda superior izquierda del rango

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;
}

Se puede incluir en una frmula en cualquier celda de la hoja de clculo:

= 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.

Secuencias ejecutadas por el usuario


Estas secuencias tienen acceso irrestricto a todo el poder de Google Apps Script. Se pueden agregar menes para
generar hojas completas, crear otras hojas de clculo, enviar emails e interactuar con otros productos de Google, con
servicios de terceros, e incluso con servidores propios, si fuera el caso.

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]

Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

Publicado 10th June 2013 por Alejandro Silvestri

Ver comentarios

7th June 2013 Liberando la energa del tomo: La funcin ARRAYFORMULA


buscar

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.

La expresin buscada tendra esta forma:

=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

La hoja de clculo seala un error, no interpreta esta sintaxis.

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)))

ARRAYFORMULA le da un nuevo significado a C1:C20<10 (y por supuesto tambin a B1:B20>0 ). Ahora, la


expresin C1:C20<10 devuelve como resultado una matriz de 20 filas y 1 columna, cuyos valores son VERDADERO o
FALSO, segn resulta de evaluar cada celda del rango con <10.
sum buscar

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.

Claves para usar ARRAYFORMULA


La expresin argumento de ARRAYFORMULA se evala como expresin matricial. En el ejemplo anterior,

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.

Estas tcnicas logran el resultado esperado:

Se puede simular una funcin AND anidando IF. Por ejemplo,

if( AND(C1:C20<10; B1:B20>0); VERDADERO; FALSO)


no funciona, pero se implementa con la expresin matricial
if(C1:C20<10; if(B1:B20>0; VERDADERO; FALSO))

Se pueden usar operadores matemticos para implementar AND y OR:

if( AND(C1:C20<10; B1:B20>0); VERDADERO; FALSO)


se implementa con la expresin matricial
if( (C1:C20<10) * (B1:B20>0); VERDADERO; FALSO)

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.

El resultado equivale exactamente a escribir la siguiente frmula:

=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.

Publicado 7th June 2013 por Alejandro Silvestri

Ver comentarios

Bsqueda avanzada de textos dentro de celda: RegEx -


6th June 2013
Expresiones Regulares
Publiqu este artculo originalmente en el foro de Google Drive [http://productforums.google.com/forum/#!topic/docs-
es/jyBSTCS7uXc/discussion] .

Las funciones REGEX


Hojas de Clculo de Google incorporan algunas funciones que Excel no tiene. Es el caso de tres funciones que usan
expresiones regulares, que permiten hacer bsquedas avanzadas dentro de un texto. Por ejemplo, en el siguiente texto:

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:

REGEXEXTRACT: devuelve el texto que responde al patrn


REGEXMATCH: devuelve TRUE si se encuentra algn texto que responda al patrn
REGEXREPLACE: reemplaza el texto que responde al patrn, por otro dado
Ms informacin sobre estas funciones en la lista de funciones de Google [https://support.google.com/drive/bin/static.py?
. buscar
Publicado 6th June 2013 por Alejandro Silvestri
Classic
Ver comentarios

6th June 2013 SUMAR.SI.CONJUNTO


Este artculo es una transcripcin revisada del artculo original del foro de Google Drive [http://productforums.google.com/forum/#!category-topic/docs-es/foro/jaH5cJ55oBU] .
Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

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")


(fuente Microsoft) [http://office.microsoft.com/es-es/excel-help/funcion-sumar-si-conjunto-HA010047504.aspx]
[http://office.microsoft.com/es-es/excel-help/funcion-sumar-si-conjunto-HA010047504.aspx]
Esta funcin suma del rango A1:A20 solamente aqullas filas que cumplen con el criterio B1:B20>0 y C1:C20<10.
Ntese que los tres rangos tienen la misma forma (1 columna por 20 filas). Podran tener cualquier otra forma, pero los tres
tienen que tener la misma.
Adems, la funcin no est limitada a dos criterios, puede tener muchos ms.
A continuacin voy a transcribir este mismo ejemplo pero en varios renglones, para mayor claridad, y luego poner un equivalente
para hojas de clculo Google:

=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:

=ArrayFormula(sum( (B1:B20>0) * A1:A20 ))


=ArrayFormula(sum( (C1:C20<10) * (B1:B20>0) * A1:A20 ))
=ArrayFormula(sum( (D1:D20=5) * (C1:C20<10) * (B1:B20>0) * A1:A20))

Los espacios no son necesarios, estn solamente para facilitar la lectura.

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]

Seguinos en la comunidad en castellano de Hojas de Clculo Google [https://plus.google.com/u/0/communities/117381564739239305447]

Publicado 6th June 2013 por Alejandro Silvestri

Ver comentarios

You might also like