Cómo crear informes en Google Sheets sin saber código

Genera informes automatizados en Google Sheets usando inteligencia artificial y Apps Script sin saber nada de código en cuestión de minutos

🔒

Restringido

Zona exclusiva para miembros Premium
APÚNTATE A LA LISTA DE ESPERA

Si manejas datos en Google Sheets y quieres transformar esa información en informes visuales y dinámicos sin necesidad de programar, este tutorial es para ti. En solo 10 minutos, aprenderás a usar inteligencia artificial y Google Apps Script para automatizar la generación de informes personalizados.

No necesitas ser un experto en análisis de datos ni en programación. Solo sigue estos pasos y obtendrás un reporte automatizado basado en IA en tu hoja de cálculo.

Lo que necesitarás

Antes de empezar, asegúrate de contar con lo siguiente:

  • Una hoja de cálculo de Google con datos sin procesar (ej. datos de anuncios de Facebook).
  • Usar la IA de Promtpea para generar el código.
  • Un prompt claro para la IA con instrucciones precisas.
  • Acceso a Apps Script, que viene integrado en Google Sheets.

Paso 1: Configura tus datos en Google Sheets

Sigue estos pasos:

  • Abre o crea una hoja de Google con los datos sin procesar.
  • Asegúrate de que tenga encabezados claros en la primera fila (ejemplo: Nombre del anuncio, Alcance, Clics, CPC, etc.).
  • Renombra la pestaña con los datos como "Raw Data" para que el script pueda identificarla fácilmente.
  • Verifica que los encabezados sean correctos, ya que los usaremos en el código.

Tip: Si los datos son sensibles, solo proporciona los nombres de las columnas a la IA en lugar de los datos completos.

Paso 2: Aplica el prompt para la IA

Ahora, necesitamos que la IA nos ayude a generar el código para automatizar el informe. Para ello, utilizaremos un prompt detallado.

Prompt recomendado:

Actúa como un experto analista de datos. Quiero que me crees un informe de anuncios de Meta utilizando App Script para Google Sheets. Los datos de los anuncios están en una hoja llamada "Raw Data" y quiero que uses esos datos para crear el informe.

Me gustaría que en la parte superior del informe aparezcan las métricas principales, como: Alcance, Clics, Costo promedio por clic, Cantidad gastada, Compras, Valor de conversión de compras, Valor promedio de pedido y ROAS.

Luego, me gustaría una tabla con un desglose por anuncio, mostrando el rendimiento de cada anuncio con las métricas mencionadas anteriormente.

A continuación, se muestra la lista de los encabezados de columna para esa hoja:

Nombre del anuncio
Alcance
Clics
CPC (€)
Gasto (€)
Compras
Valor de conversión
ROAS
CPM
CTR

Cómo usarlo: Copia y pega este prompt en un nuevo chat de Promptea. La IA generará un script de Apps Script que podrás usar directamente.

Paso 3: Inserta el código en Apps Script

Sigue este proceso paso a paso:

1/ Abre tu hoja de Google.

2/ Ve a Extensiones →

3/ Se abrirá el editor de código de Google Apps Script.

4/ Elimina cualquier código que aparezca por defecto.

5/ Pega el código generado por la IA en el editor.

6/ Guarda y ejecuta el script.

7/ La primera vez, Google solicitará permisos. Acéptalos.

Nota: Si al ejecutar el script aparece un error, copia el mensaje y consulta con la IA para que te ayude a corregirlo.

Paso 4: Personaliza tu informe

Ajusta el diseño y formato

Si el informe generado no se ve como deseas, puedes pedirle a la IA que modifique el código con instrucciones específicas.

Ejemplo: "Cambia la fuente a Arial, coloca los encabezados en negrita y usa un fondo amarillo claro para destacar las métricas clave."

Añade o eliminar secciones

Si necesitas agrupar datos por campaña o mostrar gráficos adicionales, solo pídeselo a la IA.

Ejemplo: "Agrupa los datos por campaña y agrega un gráfico de tendencias con los clics y el gasto a lo largo del tiempo."

Paso 5: Actualiza los datos y vuelve a ejecutar el informe

Cuando tengas nuevas filas en la hoja "Raw Data", simplemente:

  1. Haz clic en el botón "Ejecutar" en Apps Script.
  2. Ve a la pestaña "Informe" y revisa las métricas actualizadas.

Automatización: Puedes programar el script para ejecutarse automáticamente cada día o cada hora. Pregunta a la IA cómo hacerlo.

Consejos finales

  • Revisa siempre los datos generados para evitar errores en las métricas.
  • Si compartes el informe, protege los datos sensibles con permisos adecuados.
  • Explora otras funciones de Apps Script para automatizar aún más tus tareas.

Script completo que funciona con el ejemplo visto en el tutorial

function onOpen() {
 const ui = SpreadsheetApp.getUi();
 ui.createMenu('Meta Ads')
   .addItem('Generar Informe', 'generarInformeMetaAds')
   .addToUi();
}

function generarInformeMetaAds() {
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const datosHoja = ss.getSheetByName('Raw Data');
 const informeHoja = ss.getSheetByName('Informe') || ss.insertSheet('Informe');

 const ultimaFila = datosHoja.getLastRow();
 const ultimaColumna = datosHoja.getLastColumn();
 const datos = datosHoja.getRange(1, 1, ultimaFila, ultimaColumna).getValues();

 const encabezados = datos[0];
 const datosFilas = datos.slice(1);

 // Calcular métricas principales y por anuncio
 const performance = calcularMetricasGlobales(datosFilas, encabezados);
 const desgloseAnuncios = calcularMetricasPorAnuncio(datosFilas, encabezados);

 // Limpiar hoja y establecer anchos de columna
 informeHoja.clear();
 informeHoja.setColumnWidth(1, 250);
 informeHoja.setColumnWidths(2, 8, 130);

 // Encabezado del informe
 const encabezado = [
   ['Informe de Rendimiento de Meta Ads', '', '', '', '', '', '', '', ''],
   ['Periodo:', `${new Date().toLocaleDateString()}`, '', '', '', '', '', '', ''],
   ['Generado:', new Date().toLocaleString(), '', '', '', '', '', '', ''],
   ['', '', '', '', '', '', '', '', '']
 ];
 informeHoja.getRange(1, 1, encabezado.length, 9).setValues(encabezado);
 
 // Estilos del encabezado
 const headerRange = informeHoja.getRange('A1:I4');
 headerRange.setBackground('#f0f2f5').setBorder(true, true, true, true, false, false, '#dadde1', SpreadsheetApp.BorderStyle.SOLID);
 const titleRange = informeHoja.getRange('A1:I1');
 titleRange.merge().setFontFamily('Arial').setFontSize(24).setFontColor('#1877f2').setHorizontalAlignment('center');

 // Sección de métricas clave
 const kpiData = [
   ['Métricas Clave', '', '', '', '', '', '', '', ''],
   ['', '', '', '', '', '', '', '', ''],
   ['Alcance', 'Clics en enlace', 'CPC Promedio (€)', 'Gasto Total (€)', 'Compras', 'Valor de Conversión (€)', 'AOV (€)', 'ROAS', ''],
   [performance.alcance, performance.clics, performance.cpcPromedio, performance.gasto, performance.compras, performance.valorConversion, performance.aov, performance.roas, '']
 ];
 const kpiStartRow = encabezado.length + 1;
 informeHoja.getRange(kpiStartRow, 1, kpiData.length, 9).setValues(kpiData);

 // Estilos de métricas clave
 const kpiTitleRange = informeHoja.getRange(kpiStartRow, 1, 1, 9);
 kpiTitleRange.merge().setFontFamily('Arial').setFontSize(18).setFontColor('#1877f2').setBackground('#ffffff').setHorizontalAlignment('center');

 // Tabla de desglose por anuncio
 const adTableStartRow = kpiStartRow + 6;
 informeHoja.getRange(adTableStartRow, 1, 1, 9).setValues([['Desglose por Anuncio', '', '', '', '', '', '', '', '']]);
 informeHoja.getRange(adTableStartRow, 1, 1, 9).merge().setFontFamily('Arial').setFontSize(18).setFontColor('#1877f2').setBackground('#ffffff').setHorizontalAlignment('center');
 informeHoja.getRange(adTableStartRow + 2, 1, 1, 9).setValues([['Nombre del anuncio', 'Alcance', 'Clics en enlace', 'CPC (€)', 'Gasto (€)', 'Compras', 'Valor de conversión (€)', 'ROAS', 'CPM']]);
 
 // Agregar datos por anuncio
 const adData = desgloseAnuncios.map(ad => [
   ad.nombre, ad.alcance, ad.clics, ad.cpc, ad.gasto, ad.compras, ad.valorConversion, ad.roas, ad.cpm
 ]);
 informeHoja.getRange(adTableStartRow + 3, 1, adData.length, 9).setValues(adData);

 // Agregar gráfico
 agregarGrafico(informeHoja, datosFilas, encabezados, adTableStartRow + adData.length + 4);

 // Notificar al usuario
 SpreadsheetApp.getUi().alert("¡Informe generado con éxito!");
}

function calcularMetricasGlobales(datos, encabezados) {
 let totalAlcance = 0, totalClics = 0, totalGasto = 0, totalCompras = 0, totalValorConversion = 0;
 datos.forEach(fila => {
   totalAlcance += fila[1] || 0;
   totalClics += fila[2] || 0;
   totalGasto += fila[4] || 0;
   totalCompras += fila[5] || 0;
   totalValorConversion += fila[6] || 0;
 });

 return {
   alcance: totalAlcance,
   clics: totalClics,
   cpcPromedio: (totalClics > 0 ? totalGasto / totalClics : 0).toFixed(2),
   gasto: totalGasto,
   compras: totalCompras,
   valorConversion: totalValorConversion,
   aov: (totalCompras > 0 ? totalValorConversion / totalCompras : 0).toFixed(2),
   roas: (totalGasto > 0 ? totalValorConversion / totalGasto : 0).toFixed(2)
 };
}

function calcularMetricasPorAnuncio(datos, encabezados) {
 return datos.map(fila => ({
   nombre: fila[0],
   alcance: fila[1],
   clics: fila[2],
   cpc: fila[3],
   gasto: fila[4],
   compras: fila[5],
   valorConversion: fila[6],
   roas: fila[7],
   cpm: fila[8]
 }));
}

function agregarGrafico(sheet, datos, headers, startRow) {
 const tempSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('TempData');
 const chartData = [
   ['Fecha', 'Gasto', 'Ingresos', 'ROAS'],
   ...datos.map(row => [new Date().toLocaleDateString(), row[4], row[6], row[7]])
 ];
 
 tempSheet.getRange(1, 1, chartData.length, 4).setValues(chartData);
 
 const chart = sheet.newChart()
   .setChartType(Charts.ChartType.LINE)
   .addRange(tempSheet.getRange(1, 1, chartData.length, 4))
   .setPosition(startRow, 1, 0, 0)
   .setOption('title', 'Tendencias de Desempeño')
   .setOption('width', 800)
   .setOption('height', 400)
   .build();
 
 sheet.insertChart(chart);
 SpreadsheetApp.getActiveSpreadsheet().deleteSheet(tempSheet);
}