Usando ImportRange desde Google Apps Script

Hoy vamos a ver algo muy interesante: cómo aplicar fórmulas desde Google Apps Script. Lo haremos con un ejemplo usando ImportRange, una de las funciones más queridas pero también con algunas dificultades y errores. Vamos a crear funciones personalizadas para importar datos de diferentes maneras.

Introducción

Vamos a crear nuevas funciones personalizadas para ImportRange que puedan:

  1. Hacer un ImportRange clásico.
  2. Importar datos y pegarlos como valores.
  3. Importar datos acumulando valores.
  4. Importar datos sin usar la función ImportRange.

Esto nos permitirá controlar mejor los datos y evitar errores comunes con ImportRange.

Configuración Inicial

Primero, abrimos Google Sheets y vamos a Extensiones > Apps Script. Aquí es donde escribiremos nuestro código.

ImportRange Clásico

Primero, veamos cómo hacer un ImportRange clásico con Apps Script.

  1. Abrir la hoja de cálculo destino.
  2. Copiar el ID del archivo origen.
  3. Escribir el código en Apps Script:
function importarDatos() {
  var libroDestino = SpreadsheetApp.getActiveSpreadsheet();
  var hojaDestino = libroDestino.getSheetByName("Hoja1");
  var celda = hojaDestino.getRange("A1");

  var URL_origen = "URL_DE_TU_ARCHIVO_ORIGEN";
  var nombre_hoja_origen = "Datos";

  var referencia_origen = "'Datos'!A1:B"; // Ajustar según tu rango

  var formula = "=IMPORTRANGE('" + URL_origen + "', '" + referencia_origen + "')";

  celda.setFormula(formula);
}

Este código simplemente pone la fórmula ImportRange en la celda A1 de la hoja destino.

Importar Datos y Pegar Como Valores

Para evitar problemas con ImportRange, podemos copiar y pegar los datos como valores.

function importarDatosComoValores() {
  var libroDestino = SpreadsheetApp.getActiveSpreadsheet();
  var hojaDestino = libroDestino.getSheetByName("Hoja1");
  var celda = hojaDestino.getRange("A1");

  var URL_origen = "URL_DE_TU_ARCHIVO_ORIGEN";
  var nombre_hoja_origen = "Datos";

  var referencia_origen = "'Datos'!A1:B"; // Ajustar según tu rango

  var formula = "=IMPORTRANGE('" + URL_origen + "', '" + referencia_origen + "')";

  celda.setFormula(formula);

  // Esperar un momento para que la fórmula se calcule
  SpreadsheetApp.flush();

  // Copiar y pegar como valores
  var rango = hojaDestino.getDataRange();
  var valores = rango.getValues();

  rango.setValues(valores);
}

Este código primero pone la fórmula y luego la convierte en valores.

Importar Datos Acumulando Valores

Para casos en los que necesitamos acumular datos nuevos sin sobrescribir los antiguos.

function importarDatosAcumulando() {
  var libroDestino = SpreadsheetApp.getActiveSpreadsheet();
  var hojaDestino = libroDestino.getSheetByName("Hoja1");
  var ultimaFila = hojaDestino.getLastRow();
  var celda = hojaDestino.getRange("A" + (ultimaFila + 1));

  var URL_origen = "URL_DE_TU_ARCHIVO_ORIGEN";
  var nombre_hoja_origen = "Datos";

  var referencia_origen = "'Datos'!A1:B"; // Ajustar según tu rango

  var formula = "=IMPORTRANGE('" + URL_origen + "', '" + referencia_origen + "')";

  celda.setFormula(formula);

  // Esperar un momento para que la fórmula se calcule
  SpreadsheetApp.flush();

  // Copiar y pegar como valores
  var rango = hojaDestino.getDataRange();
  var valores = rango.getValues();

  rango.setValues(valores);
}

Este código añade los datos importados a la siguiente fila disponible.

Importar Datos Sin Usar ImportRange

Finalmente, veamos cómo importar datos sin usar la función ImportRange, directamente con Apps Script.

function importarValores() {
  var libroDestino = SpreadsheetApp.getActiveSpreadsheet();
  var hojaDestino = libroDestino.getSheetByName("Hoja1");
  var URL_origen = "URL_DE_TU_ARCHIVO_ORIGEN";
  var libroOrigen = SpreadsheetApp.openByUrl(URL_origen);
  var hojaOrigen = libroOrigen.getSheetByName("Datos");

  var datos = hojaOrigen.getDataRange().getValues();

  hojaDestino.clear();
  hojaDestino.getRange(1, 1, datos.length, datos[0].length).setValues(datos);
}

Este código copia directamente los valores de la hoja origen y los pega en la hoja destino.

Crear Menú Personalizado

Para facilitar el uso de estas funciones, podemos crear un menú personalizado en Google Sheets.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Importar Datos')
      .addItem('Importar Clásico', 'importarDatos')
      .addItem('Importar Como Valores', 'importarDatosComoValores')
      .addItem('Importar Acumulando', 'importarDatosAcumulando')
      .addItem('Importar Sin ImportRange', 'importarValores')
      .addToUi();
}

Este menú aparecerá cada vez que abramos la hoja de cálculo y nos permitirá ejecutar nuestras funciones personalizadas con un solo clic.

Conclusión

Hoy hemos visto cómo aplicar fórmulas desde Google Apps Script, específicamente con la función ImportRange. Esto nos permite manejar datos de manera más eficiente y evitar errores comunes. Si tienes bases de datos grandes o necesitas automatizar la importación de datos, estas funciones serán muy útiles.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Pin It on Pinterest

Share This