Conceptos básicos de Apps Script con Hojas de cálculo de Google, parte 2: Hojas de cálculo, hojas y rangos

1. Introducción

Te damos la bienvenida a la segunda parte de la playlist del codelab de Fundamentos de Apps Script con Hojas de cálculo de Google. El codelab anterior se centró en los conceptos del editor de secuencias de comandos, las macros y las funciones personalizadas. En este codelab, se profundiza en el servicio de hojas de cálculo que puedes usar para leer, escribir y manipular datos en Hojas de cálculo de Google.

Qué aprenderás

  • Cómo se representan las hojas de cálculo, las hojas y los rangos en Apps Script
  • Cómo acceder a la hoja de cálculo activa (abierta), crearla y cambiarle el nombre con las clases SpreadsheetApp y Spreadsheet
  • Cómo cambiar el nombre de una hoja y la orientación de filas o columnas de un rango con la clase Sheet
  • Cómo especificar, activar, mover y ordenar un grupo de celdas o un rango de datos con la clase Range

Antes de comenzar

Este es el segundo codelab de la playlist de Fundamentos de Apps Script con Hojas de cálculo de Google. Antes de comenzar, asegúrate de completar el primer codelab: Macros and Custom Functions.

Requisitos

  • Comprensión de los temas básicos de Apps Script que se exploraron en el codelab anterior de esta playlist
  • Conocimientos básicos sobre el editor de Apps Script
  • Conocimientos básicos de Hojas de cálculo de Google
  • Capacidad de leer la notación A1 de Hojas de cálculo
  • Conocimientos básicos de JavaScript y su clase String

En la siguiente sección, se presentan las clases principales del servicio de Hojas de cálculo.

2. Introducción al servicio de hojas de cálculo

Cuatro clases abarcan la base del servicio de Hojas de cálculo: SpreadsheetApp, Spreadsheet, Sheet y Range. En esta sección, se describen estas clases y para qué se usan.

La clase SpreadsheetApp

Antes de profundizar en las hojas de cálculo, las hojas y los rangos, debes revisar su clase principal: SpreadsheetApp. Muchos secuencias de comandos comienzan llamando a métodos SpreadsheetApp, ya que pueden proporcionar el punto de acceso inicial a tus archivos de Hojas de cálculo de Google. Puedes considerar SpreadsheetApp como la clase principal del servicio de hojas de cálculo. Aquí no se explora en profundidad la clase SpreadsheetApp. Sin embargo, más adelante en este codelab, encontrarás ejemplos y ejercicios que te ayudarán a comprender esta clase.

Hojas de cálculo, hojas y sus clases

En Hojas de cálculo, una hoja de cálculo es un archivo de Hojas de cálculo de Google (almacenado en Google Drive) que contiene datos organizados por filas y columnas. A veces, se hace referencia a una hoja de cálculo como una "Hoja de Google", de la misma manera que se hace referencia a un documento como un "Documento de Google".

Puedes usar la clase Spreadsheet para acceder a los datos de los archivos de Hojas de cálculo de Google y modificarlos. También puedes usar esta clase para otras operaciones a nivel del archivo, como agregar colaboradores.

f00cc1a9eb606f77.png

Una hoja** representa la página individual de una hoja de cálculo, a veces denominada "pestaña". Cada hoja de cálculo puede contener una o más hojas. Puedes usar la clase Sheet** para acceder a la configuración y los datos a nivel de la hoja, y modificarlos, por ejemplo, para mover filas o columnas de datos.

39dbb10f83e3082.png

En resumen, la clase Spreadsheet opera en la colección de hojas y define un archivo de Hojas de cálculo de Google en Google Drive. La clase Sheet opera en hojas individuales dentro de una hoja de cálculo.

La clase Range

La mayoría de las operaciones de manipulación de datos (por ejemplo, leer, escribir o dar formato a los datos de las celdas) requieren que definas a qué celdas se aplica la operación. Puedes usar la clase Range para seleccionar conjuntos específicos de celdas dentro de una hoja. Las instancias de esta clase representan un rango, es decir, un grupo de una o más celdas adyacentes en una hoja. Puedes especificar rangos por sus números de fila y columna, o bien con la notación A1.

En el resto del codelab, se muestran ejemplos de secuencias de comandos que funcionan con estas clases y sus métodos.

3. Configurar

Antes de continuar, necesitas una hoja de cálculo con algunos datos. Te proporcionamos una: Haz clic en este vínculo para copiar la hoja de datos y, luego, en Crear una copia.

5376f721894b10d9.png

Se colocará una copia de la hoja de cálculo de ejemplo para que la uses en tu carpeta de Google Drive con el nombre “Copia de Hoja de cálculo sin título”. Usa esta hoja de cálculo para completar los ejercicios de este codelab.

Recuerda que puedes abrir el editor de secuencias de comandos desde Hojas de cálculo de Google haciendo clic en Extensiones > Apps Script.

Cuando abres un proyecto de Apps Script en el editor de secuencia de comandos por primera vez, el editor de secuencia de comandos crea un proyecto de secuencia de comandos y un archivo de secuencia de comandos para ti.

En la siguiente sección, se muestra cómo usar la clase Spreadsheet para mejorar esta hoja de cálculo.

4. Acceder a hojas de cálculo y modificarlas

En esta sección, puedes aprender a usar las clases SpreadsheetApp y Spreadsheet para acceder a hojas de cálculo y modificarlas. Específicamente, los ejercicios te enseñan a cambiar el nombre de una hoja de cálculo y a duplicar hojas dentro de una hoja de cálculo.

Estas son operaciones simples, pero a menudo forman parte de un flujo de trabajo más grande y complejo. Una vez que comprendas cómo automatizar estas tareas con código de secuencia de comandos, será más fácil aprender a automatizar operaciones más elaboradas.

Cómo cambiar el nombre de la hoja de cálculo activa

Supongamos que deseas cambiar el nombre predeterminado "Copia de hoja de cálculo sin título" por un título que refleje mejor el propósito de tu hoja de cálculo. Puedes hacerlo con las clases SpreadsheetApp y Spreadsheet.

  1. En el editor de secuencias de comandos, reemplaza el bloque de código myFunction() predeterminado por el siguiente código:
function renameSpreadsheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  mySS.rename("2017 Avocado Prices in Portland, Seattle");
}
  1. Para guardar el script, haz clic en Guardar guardar.
  2. Para cambiar el nombre de tu proyecto de Apps Script, haz clic en Proyecto sin título, ingresa "Precios de aguacate" como el nuevo nombre del proyecto y haz clic en Cambiar nombre.
  3. Para ejecutar tu secuencia de comandos, selecciona renameSpreadsheet en la lista de funciones y haz clic en Ejecutar.
  4. Para autorizar la macro, sigue las instrucciones en pantalla. Si recibes el mensaje "Esta app no está verificada", haz clic en Opciones avanzadas y, luego, en Ir a Avocado prices (no seguro). En la siguiente pantalla, haz clic en Permitir.

Una vez que se ejecute la función, el nombre del archivo de tu hoja de cálculo debería cambiar:

226c7bc3c2fbf33e.png

Veamos el código que ingresaste. El método getActiveSpreadsheet() devuelve un objeto que representa la hoja de cálculo activa, es decir, la copia de la hoja de cálculo del ejercicio que creaste. Este objeto de hoja de cálculo se almacena en la variable mySS. Llamar a rename(newName) en mySS cambia el nombre del archivo de hoja de cálculo en Google Drive a "Precios del aguacate en 2017 en Portland y Seattle".

Dado que la variable mySS es una referencia a la hoja de cálculo, puedes hacer que tu código sea más limpio y eficiente llamando a los métodos Spreadsheet en mySS en lugar de llamar a getActiveSpreadsheet() de forma repetida.

Duplicar la hoja activa

En tu hoja de cálculo actual, solo tienes una hoja. Puedes llamar al método Spreadsheet.duplicateActiveSheet() para hacer una copia de la hoja:

  1. Agrega la siguiente función nueva debajo de la función renameSpreadsheet() que ya se encuentra en tu proyecto de secuencia de comandos:
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();
}
  1. Guarda tu proyecto de secuencia de comandos.
  2. Para ejecutar tu secuencia de comandos, selecciona duplicateAndOrganizeActiveSheet en la lista de funciones y haz clic en Ejecutar.

Vuelve a Hojas para ver que se agregó una nueva pestaña de hoja "Copia de Sheet_Original" a tu hoja de cálculo.

d24f9f4ae20bf7d4.gif

En esta nueva función, el método duplicateActiveSheet() crea, activa y devuelve la hoja duplicada en tu hoja de cálculo. Esta hoja resultante se almacena en duplicateSheet, pero el código aún no hace nada con esa variable.

En la siguiente sección, usarás la clase Sheet para cambiar el nombre y el formato de la hoja duplicada.

5. Da formato a tu hoja con la clase Sheet

La clase Sheet proporciona métodos que permiten que las secuencias de comandos lean y actualicen hojas. En esta sección, puedes aprender a cambiar el nombre de una hoja y los anchos de las columnas con métodos de la clase Sheet.

Cómo cambiar el nombre de la hoja

Cambiar el nombre de las hojas es tan simple como cambiar el nombre de la hoja de cálculo en renameSpreadsheet(). Solo se requiere una llamada al método.

  1. En Hojas de cálculo de Google, haz clic en la hoja Sheet_Original para activarla.
  2. En Apps Script, modifica la función duplicateAndOrganizeActiveSheet() para que coincida con lo siguiente:
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // Change the name of the new sheet.
  duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId());
}
  1. Guarda y ejecuta la función.

En Hojas de cálculo de Google, se crea una hoja duplicada y se le cambia el nombre cuando ejecutas la función:

91295f42354f62e7.gif

En el código agregado, el método setName(name) cambia el nombre de duplicateSheet con getSheetID() para obtener el número de ID único de la hoja. El operador + concatena el ID de la hoja al final de la cadena "Sheet_".

Cómo modificar las columnas y filas de una hoja

También puedes usar la clase Sheet para darle formato a tu hoja. Por ejemplo, podemos actualizar tu función duplicateAndOrganizeActiveSheet() para que también cambie el tamaño de las columnas de la hoja duplicada y agregue filas inmovilizadas:

  1. En Hojas de cálculo de Google, haz clic en la hoja Sheet_Original para activarla.
  2. En Apps Script, modifica la función duplicateAndOrganizeActiveSheet() para que coincida con lo siguiente:
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // Change the name of the new sheet.
  duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId());

  // Format the new sheet.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);
}
  1. Guarda y ejecuta la función.

En Hojas de cálculo de Google, se crea, se cambia el nombre, se activa y se formatea una hoja duplicada:

2e57c917ab157dad.gif

El código que agregaste usa autoResizeColumns(startColumn, numColumns) para cambiar el tamaño de las columnas de la hoja y mejorar la legibilidad. El método setFrozenRows(rows) inmoviliza la cantidad determinada de filas (dos, en este caso), lo que mantiene visibles las filas de encabezado a medida que el lector se desplaza hacia abajo en la hoja de cálculo.

En la siguiente sección, aprenderás sobre los rangos y la manipulación básica de datos.

6. Cómo reorganizar datos con la clase Range

La clase Range y sus métodos proporcionan la mayoría de las opciones de manipulación y formato de datos en el servicio de hojas de cálculo.

En esta sección, se presenta la manipulación básica de datos con rangos. Estos ejercicios se enfocan en cómo utilizar rangos en Apps Script, mientras que otros codelabs de esta playlist profundizan en la manipulación y el formato de datos.

Cómo mover rangos

Puedes activar y mover rangos de datos con métodos de clase y la notación A1, una abreviatura para identificar conjuntos específicos de celdas dentro de las hojas de cálculo. Si necesitas volver a familiarizarte con ella, puedes consultar esta descripción de la notación A1.

Actualicemos tu método duplicateAndOrganizeActiveSheet() para que también transfiera algunos datos:

  1. En Hojas de cálculo de Google, haz clic en la hoja Sheet_Original para activarla.
  2. En Apps Script, modifica la función duplicateAndOrganizeActiveSheet() para que coincida con lo siguiente:
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // Change the name of the new sheet.
  duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId());

  // Format the new sheet.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);

  // Move column F to column C.
  var myRange = duplicateSheet.getRange("F2:F");
  myRange.moveTo(duplicateSheet.getRange("C2"));
}
  1. Guarda y ejecuta la función.

Cuando ejecutas esta función, se crea, activa y formatea una hoja duplicada. Además, el contenido de la columna F se mueve a la columna C:

10ea483aec52457e.gif

El código nuevo usa el método getRange(a1Notation) para identificar el rango de datos que se debe mover. Si ingresas la notación A1 "F2:F" como parámetro del método, especificas la columna F (sin incluir F1). Si existe el rango especificado, el método getRange(a1Notation) devuelve su instancia Range. El código almacena la instancia en la variable myRange para facilitar su uso.

Una vez que se identifica el rango, el método moveTo(target) toma el contenido de myRange (tanto los valores como el formato) y lo mueve. El destino (columna C) se especifica con la notación A1 "C2". Esta es una sola celda, no una columna. Cuando mueves datos, no es necesario que coincidan los tamaños con los rangos de destino. Apps Script simplemente alinea la primera celda de cada una.

Cómo ordenar rangos

La clase Range te permite leer, actualizar y organizar grupos de celdas. Por ejemplo, puedes ordenar un rango de datos con el método Range.sort(sortSpecObj):

  1. En Hojas de cálculo de Google, haz clic en la hoja Sheet_Original para activarla.
  2. En Apps Script, modifica la función duplicateAndOrganizeActiveSheet() para que coincida con lo siguiente:
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // Change the name of the new sheet.
  duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId());

  // Format the new sheet.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);

  // Move column F to column C.
  var myRange = duplicateSheet.getRange("F2:F");
  myRange.moveTo(duplicateSheet.getRange("C2"));

  // Sort all the data using column C (Price information).
  myRange = duplicateSheet.getRange("A3:D55");
  myRange.sort(3);
}
  1. Guarda y ejecuta la función.

Ahora, además del formato anterior, la función ordena todos los datos de la tabla con la información de precios de la columna C:

a6cc9710245fae8d.png

El código nuevo usa getRange(a1Notation) para especificar un rango nuevo que abarca de A3 a D55 (toda la tabla, excepto los encabezados de columna). Luego, el código llama al método sort(sortSpecObj) para ordenar la tabla. Aquí, el parámetro sortSpecObj es el número de columna por el que se ordenará. El método ordena el rango de modo que los valores de la columna indicada vayan del más bajo al más alto (valores ascendentes). El método sort(sortSpecObj) puede realizar requisitos de ordenamiento más complejos, pero no los necesitas aquí. Puedes ver todas las diferentes formas en que puedes llamar a los rangos de ordenamiento en la documentación de referencia del método.

¡Felicitaciones! Completaste correctamente todos los ejercicios del codelab. En la siguiente sección, se revisan los puntos clave de este codelab y se muestra un avance del siguiente codelab de esta playlist.

7. Conclusión

Llegaste al final de este codelab. Ahora puedes usar y definir las clases y los términos esenciales del servicio de hojas de cálculo en Apps Script.

Ya puedes pasar al siguiente codelab.

¿Te resultó útil este codelab?

No

Temas abordados

¿Qué sigue?

El siguiente codelab de esta playlist profundiza en cómo leer, escribir y modificar datos en una hoja de cálculo.

Encuentra el siguiente codelab en Trabajar con datos.