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:
- Hacer un
ImportRangeclásico. - Importar datos y pegarlos como valores.
- Importar datos acumulando valores.
- 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.
- Abrir la hoja de cálculo destino.
- Copiar el ID del archivo origen.
- 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.
intente aplicarlo a mis hojas y me marca este error
2:40:15 p.m. Advertencia Este proyecto requiere acceso a tu Cuenta de Google para poder ejecutarse. Vuelve a intentarlo y, esta vez, permite el acceso.
Saludos