Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Enviar un correo electrónico desde Google Sheets requiere el uso de Google Apps Script. Pero no se preocupe, si nunca antes ha creado un solo script de Google Apps, enviar un correo electrónico es muy simple.

En el siguiente tutorial, aprenderá cómo verificar el valor de una celda en Hojas de cálculo de Google . Si el valor supera un cierto límite de umbral, puede enviar automáticamente un correo electrónico de alerta a cualquier dirección de correo electrónico que desee.

Hay muchos usos para este script. Podría recibir una alerta si las ganancias diarias en su informe de ventas caen por debajo de cierto nivel. O puede recibir un correo electrónico si sus empleados informan que han facturado al cliente por demasiadas horas en su hoja de cálculo de seguimiento de proyectos.

No importa la aplicación, este script es convincente. También le ahorrará el tiempo de tener que monitorear las actualizaciones de su hoja de cálculo manualmente.

Paso 1: Enviar un correo electrónico con Hojas de cálculo de Google

Antes de que pueda crear una secuencia de comandos de Google Apps para enviar un correo electrónico desde Hojas de cálculo de Google , también necesitará una dirección de correo electrónico de Gmail, a la que accederá Google Apps Script para enviar sus correos electrónicos de alerta.

También deberá crear una nueva hoja de cálculo que contenga una dirección de correo electrónico.

Simplemente agregue una columna de nombre y una columna de correo electrónico, y complételas con la persona que desea que reciba el correo electrónico de alerta.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Ahora que tiene una dirección de correo electrónico para enviar un correo electrónico de alerta, es hora de crear su secuencia de comandos.

Para acceder al editor de secuencias de comandos, haga clic en Herramientas y, a continuación, haga clic en Editor de secuencias de comandos .

Verá una ventana de script con una función predeterminada llamada  myFunction() . Cambie el nombre de esto a SendEmail() .

A continuación, pegue el siguiente código dentro de la función SendEmail():

// Fetch the email address var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2"); var emailAddress = emailRange.getValues(); // Send Alert Email. var message = 'This is your Alert email!'; // Second column var subject = 'Your Google Spreadsheet Alert'; MailApp.sendEmail(emailAddress, subject, message);

Así es como funciona este código:

  • getRange y getValues ​​extraen el valor de la celda especificada en el método getRange.
  • var mensaje y var asunto definen el texto que va a construir su correo electrónico de alerta.
  • La función MailApp.sendEmail finalmente realiza la función de envío de correo electrónico de Google Scripts utilizando su cuenta de Google conectada.

Guarde el script haciendo clic en el icono del disco y luego ejecútelo haciendo clic en el icono de ejecución (flecha derecha).

Tenga en cuenta que Google Script necesita permiso para acceder a su cuenta de Gmail para enviar el correo electrónico. Entonces, la primera vez que ejecute el script, es posible que vea una alerta como la siguiente.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Haga clic en Revisar permisos y verá otra pantalla de alerta que deberá omitir.

Esta pantalla de alerta se debe a que está escribiendo un Google Script personalizado que no está registrado como oficial.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Simplemente haga clic en Avanzado y luego haga clic en el enlace Ir a SendEmail (inseguro) .

Solo tendrás que hacer esto una vez. Su secuencia de comandos se ejecutará y la dirección de correo electrónico que especificó en su hoja de cálculo recibirá un correo electrónico como el que se muestra a continuación.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Paso 2: Lectura de un valor de una celda en Hojas de cálculo de Google

Ahora que ha escrito con éxito una secuencia de comandos de Google Apps que puede enviar un correo electrónico de alerta, es hora de hacer que ese correo electrónico de alerta sea más funcional.

El siguiente paso que aprenderá es cómo leer un valor de datos de una hoja de cálculo de Google, verificar el valor y emitir un mensaje emergente si ese valor está por encima o por debajo de un límite superior.

Antes de que pueda hacer esto, deberá crear otra hoja en la hoja de cálculo de Google con la que está trabajando. Llame a esta nueva hoja "MyReport".

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Tenga en cuenta que la celda D2 es la que querrá verificar y comparar. Imagine que quiere saber todos los meses si sus ventas totales han caído por debajo de $16,000.

Vamos a crear el script de Google Apps que haga eso.

Regrese a la ventana del Editor de secuencias de comandos haciendo clic en Herramientas y luego en Editor de secuencias de comandos .

Si está utilizando la misma hoja de cálculo, aún tendrá la  función SendEmail() allí. Corta ese código y pégalo en el Bloc de notas. Lo necesitarás más tarde.

Pegue la siguiente función en la ventana de código.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); var ui = SpreadsheetApp.getUi(); // Check totals sales if (monthSales < 16000){="" ui.alert('sales="" too="" low!');="" }="">

Cómo funciona este código:

  • Cargue el valor de la celda D2 en la variable ventasmes .
  • La declaración IF compara las ventas mensuales en la celda D2 con $16,000
  • Si el valor es superior a 16 000, el código activará un cuadro de mensaje del navegador con una alerta.

Guarde este código y ejecútelo. Si funciona correctamente, debería ver el siguiente mensaje de alerta en su navegador.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Ahora que tiene un script de Google Apps que puede enviar una alerta por correo electrónico y otro script que puede comparar un valor de una hoja de cálculo, está listo para combinar los dos y enviar una alerta en lugar de activar un mensaje de alerta.

Paso 3: ponerlo todo junto

Ahora es el momento de combinar los dos scripts que ha creado en uno solo.

En este punto, debería tener una hoja de cálculo con una pestaña llamada Hoja1 que contiene el destinatario del correo electrónico de alerta. La otra pestaña llamada MyReport contiene toda su información de ventas.

De vuelta en el Editor de secuencias de comandos, es hora de poner en práctica todo lo que ha aprendido hasta ahora.

Reemplace todo el código en el editor de secuencias de comandos con sus dos funciones, editadas como se muestra aquí.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); // Check totals sales if (monthSales < 16000){="" fetch="" the="" email="" address="" var="" emailrange="SpreadsheetApp.getActiveSpreadsheet().getSheetByName(" sheet1").getrange("b2");"="" var="" emailaddress="emailRange.getValues();" send="" alert="" email.="" var="" message='This month your sales were ' +="" monthsales;="" second="" column="" var="" subject='Low Sales Alert' ;="" mailapp.sendemail(emailaddress,="" subject,="" message);="" }="">

Observe las ediciones aquí.

Dentro de la declaración IF, pegue el script SendEmail dentro de la función CheckSales() dentro de los corchetes de la declaración if.

En segundo lugar, concatene la variable ventasmes al final del mensaje de correo electrónico con el carácter + .

Lo único que queda por hacer es activar la función CheckSales() todos los meses.

Para hacer esto, en el editor de scripts:

  1. Haga clic en el elemento del menú Editar y luego haga clic en Activadores del proyecto actual .
  2. En la parte inferior de la pantalla, haga clic en crear un nuevo disparador .
  3. Seleccione la función CheckSales para ejecutar.
  4. Cambie Seleccionar origen de evento a controlado por tiempo .
  5. Cambie  Seleccione el tipo de disparador basado en el tiempo a Temporizador mensual .

Haga clic en Guardar para finalizar el activador.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Cada mes, su nuevo script se ejecutará y comparará el monto total de las ventas mensuales en la celda D2 con $16,000.

Si es menos, le enviará un correo electrónico de alerta notificándole las bajas ventas mensuales.

Use Hojas de cálculo de Google para enviar un correo electrónico basado en el valor de la celda

Como puede ver, Google Apps Scripts incluye muchas funciones en un paquete pequeño. Con solo unas pocas líneas de código simples, puede hacer cosas bastante sorprendentes.

Si desea experimentar un poco más, intente agregar el límite de comparación de $ 16,000 en otra celda de la hoja de cálculo y luego léalo en su secuencia de comandos antes de hacer la comparación. De esta manera, puede cambiar el límite simplemente cambiando el valor en la hoja.

Al modificar el código y agregar nuevos bloques de código, puede aprovechar estas cosas simples que aprende para crear eventualmente algunos scripts de Google sorprendentes.

Automatizando el proceso

Hasta ahora todo bien, pero el script anterior solo se ejecutará manualmente si no configuramos ningún activador. Afortunadamente, Google hizo que la automatización activada fuera fácil de configurar. Aquí están los pasos. 

En el editor de Apps Script, haz clic en el icono Activadores en la barra lateral izquierda (parece un pequeño reloj).

Haga clic en el enlace crear nuevo activadorr o en Agregar activador botón en la esquina inferior derecha de la página Activadores.

En el menú desplegable Elegir qué función ejecutar , seleccione enviar correos electrónicos< una i=4> función.

En el menú desplegable Seleccionar origen del evento , elija Según el tiempo.

En el menú desplegable Seleccionar tipo de activador basado en tiempo , elija la frecuencia que desee (por ejemplo, Temporizador diario para correos electrónicos diarios, Temporizador semanal para correos electrónicos semanales, etc.).

Si corresponde, elija el rango horario o día de la semana deseado.

Haga clic en Guardar para crear el activador.

Después de guardar, haga clic en el botón Implementar en la esquina superior derecha y siga las instrucciones para etiquetar y definir la implementación. Deberá otorgar permisos de ejecución a la automatización, y lo mismo ocurre con el script en sí.  

En cuanto al activador dado, dado que nuestro ejemplo trata sobre el envío de recordatorios de facturas, asumimos que son mensuales y que es apropiado enviarlos cada primero de mes entre la 1 p.m. y las 2 p.m. Pero, por supuesto, puedes cambiar la frecuencia y el tiempo según tus necesidades. 

Cómo enviar un correo electrónico con un archivo adjunto

Para mostrarle cómo enviar correos electrónicos con archivos adjuntos, reutilizaremos la hoja de ejemplo con recordatorios de facturas y refactorizaremos el fragmento para incluir archivos adjuntos. Ahora comenzamos con la función y la plantilla de correo electrónico aparece más adelante en el código. enviarcorreo electrónicorecordatorios

Debemos resaltar que el siguiente fragmento extrae archivos adjuntos de correo electrónico de una carpeta de Google Drive, donde es fundamental incluir el ID de la carpeta y seguir la convención de nomenclatura indicada. Más información sobre esto en Desglosemos la sección de código

function sendEmailReminders() { // Obtener la hoja activa var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Obtener el rango de datos (excluyendo la fila del encabezado) var dataRange = Sheet.getRange(2, 1, Sheet.getLastRow() - 1, Sheet.getLastColumn()); // Obtener los valores del rango de datos var data = dataRange.getValues(); // Recorre las filas de datos for (var i = 0; i < data.length; i++) { var row = data[i]; // Obtener los valores de cada columna var businessName = fila[0]; var correo electrónico = fila[1]; var NúmeroFactura = fila[2]; var importefactura = fila[3]; var fecha de vencimiento = fila[4]; var asunto = fila[5]; // Cuerpo del correo electrónico var emailBody = "Estimado " + nombre de empresa + ",\n\n" + "Este es un recordatorio de que la Factura #" + número de factura + " por $quot; + importe de la factura + " vence el " + fecha de vencimiento + ".\n" + "Busque la factura adjunta.\n\n" + "Gracias por su pronta atención a este asunto"; // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var BillFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } // Envía el correo electrónico con el archivo adjunto MailApp.sendEmail({ a: correo electrónico, asunto: asunto, cuerpo: cuerpo del correo electrónico, archivos adjuntos: [archivofactura] }); } }

Analicemos el código

1. Defina la función: enviar recordatorios de correo electrónico

función enviarRecordatorios de correo electrónico() {

La línea declara una función llamada , que contendrá el código para enviar recordatorios por correo electrónico con archivos adjuntos.sendEmailReminders

2. Obtenga la hoja activa:

var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

La línea recupera la hoja activa del documento de Google Sheets actualmente abierto.

3. Obtenga el rango de datos (excluyendo la fila del encabezado):

var dataRange = hoja.getRange(2, 1, hoja.getLastRow() - 1, hoja.getLastColumn());

Esta línea obtiene el rango de datos de la hoja, excluyendo la fila del encabezado. Comienza desde la segunda fila (fila 2) y la primera columna (columna 1) y se extiende hasta la última fila y la última columna de la hoja.

Nota al margen: Cuando crea su hoja personalizada, debe modificarla para que coincida con su hoja. rango de datos

4. Obtenga los valores del rango de datos:

var datos = dataRange.getValues();

Esta línea recupera los valores (contenidos) del rango de celdas definido en el paso anterior.

5. Recorra las filas de datos:

for (var i = 0; i < data.length; i++) { var fila = datos[i];

Este bucle recorre en iteración cada fila de la matriz. La variable representa la fila actual de datos en cada iteración.fordatarow

6. Obtenga los valores de cada columna:

var nombreNegocio = fila[0]; var correo electrónico = fila[1]; var NúmeroFactura = fila[2]; var importefactura = fila[3]; var fecha de vencimiento = fila[4]; var asunto = fila[5];

Las líneas anteriores extraen los valores de cada columna en la fila de datos actual. Posteriormente, cada valor se asigna a una variable para facilitar su referencia en el script. Los valores dados son personalizados para nuestra hoja ejemplar. 

7. Cree el cuerpo del correo electrónico:

var emailBody = "Estimado " + nombre de empresa + ",\n\n" + "Este es un recordatorio de que la Factura #" + número de factura + " por $quot; + importe de la factura + " vence el " + fecha de vencimiento + ".\n" + "Busque la factura adjunta.\n\n" + "Gracias por su pronta atención a este asunto";

El código construye el cuerpo del correo electrónico utilizando los valores extraídos de la hoja. El cuerpo del correo electrónico es una cadena que incluye el nombre de la empresa, el número de factura, el monto de la factura y la fecha de vencimiento.

8. Obtenga el archivo de factura correspondiente:

var facturaFolderId = 'TU_CARPETA_ID_AQUÍ'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); var archivofactura; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { console.error("No se encontró el archivo de factura para el número de factura: " + número de factura); continuar; }

Estas líneas recuperan el archivo de factura asociado con la fila actual. 

Primero, se accede a la carpeta del archivo de la factura utilizando su ID de carpeta. Asegúrate de reemplazarla con el ID de la carpeta real. TU_CARPETA_ID_AQUÍ

Tenga en cuenta que la convención de nomenclatura en nuestro ejemplo es , y la factura real se denomina "123456.pdf". Si sus archivos adjuntos tienen un nombre diferente, deberá actualizar el formato. (Número de factura + '.pdf')

A continuación, el script busca un archivo con el mismo nombre que el número de factura (suponiendo que el archivo esté en formato PDF). 

Si se encuentra el archivo, se asigna a la variable; de lo contrario, el script registra un mensaje de error y pasa a la siguiente fila.invoiceFile

9. Envíe el correo electrónico con el archivo adjunto:

MailApp.sendEmail({ a: correo electrónico, asunto: asunto, cuerpo: cuerpo del correo electrónico, archivos adjuntos: [archivofactura] });

Esta línea envía el cuerpo y los archivos adjuntos del correo electrónico, y estos son los resultados que debería obtener. Además, todos los pasos de automatización se aplican como se describió anteriormente, y tiene sentido mantener el activador mensual, ya que se trata de enviar recordatorios de facturas. 

Enviar un correo electrónico HTML con GSheets

Para enviar un correo electrónico HTML, puede realizar algunas modificaciones bastante simples en el script descrito anteriormente. Aquí lo tienes: 

function sendEmailReminders() { // Obtener la hoja activa var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Obtener el rango de datos (excluyendo la fila del encabezado) var dataRange = Sheet.getRange(2, 1, Sheet.getLastRow() - 1, Sheet.getLastColumn()); // Obtener los valores del rango de datos var data = dataRange.getValues(); // Recorre las filas de datos for (var i = 0; i < data.length; i++) { var row = data[i]; // Obtener los valores de cada columna var businessName = fila[0]; var correo electrónico = fila[1]; var NúmeroFactura = fila[2]; var importefactura = fila[3]; var fecha de vencimiento = fila[4]; var asunto = fila[5]; // cuerpo del correo electrónico HTML var emailBodyHtml = "<p>Estimado " + nombre del negocio + ",</p>" + "<p>Este es un recordatorio de que la Factura #" + número de factura + " por $quot; + importe de la factura + " vence el " + fecha de vencimiento + ".</p>" + "<p>Busque la factura adjunta.</p>" + "<p>Gracias por su pronta atención a este asunto.</p>"; // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var BillFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } // Envía el correo electrónico con el archivo adjunto MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml, archivos adjuntos: [archivofactura] }); } }

En esta versión, el texto sin formato se reemplaza con una variable que contiene contenido con formato HTML. correo electrónicoCuerpocorreo electrónicoCuerpoHtml

Al llamar a la función, la propiedad del cuerpo también se reemplaza con la propiedad, que enviará el correo electrónico como un correo electrónico HTML.MailApp.sendEmail()htmlBody

Notas al margen: 

Usamos en lugar de en el script por conveniencia. Cualquiera de las opciones funcionaría, aunque definitivamente es más legible. De todos modos, no dudes en reformatear el script y reemplazar el operador de concatenación con marcadores de posición en la interpolación de cadenas. varconstconst${expresión}

Además, ninguno de los scripts incluye funciones, ya que no eran necesarias para nuestros ejemplos. Pero, por supuesto, también es posible añadir e incluso automatizar con este tipo de scripts. bcccccc

Por último, puedes darle vida añadiendo estilos CSS personalizados; consulta la función actualizada a continuación. var correo electrónicoBodyHtml =

// Cuerpo de correo electrónico HTML con estilos CSS var emailBodyHtml = "<html><head><style>" + "cuerpo {familia de fuentes: Arial, sans-serif;}" + "p {tamaño de fuente: 14px;}" + ".invoice-info {font-weight: negrita; color: #4a4a4a;}quot; + "</estilo></cabeza><cuerpo>" + "<p>Estimado <span class='info-factura'>" + nombre del negocio + "</span>,</p>" + "<p>Este es un recordatorio de que la Factura #<span class='invoice-info'>" + número de factura + "</span> por $<span class='info-factura'>" + importe de la factura + "</span> vence el <span class='invoice-info'>" + fecha de vencimiento + "</span>.</p>" + "<p>Busque la factura adjunta.</p>" + "<p>Gracias por su pronta atención a este asunto.</p>" + "</body></html>";

Consejos profesionales: 

  • Vaya con calma con , es posible que algunos proveedores de buzones de correo no admitan ni procesen correctamente los correos electrónicos con mucho estilo, o no los muestren en absoluto. <estilo>
  • Utilice Mailtrap Email Testing para ver en qué medida los proveedores de buzones de correo admiten sus correos electrónicos HTML. 
  • Para enfatizar nuevamente, Si necesita enviar un volumen, siempre es mejor usar un MTA adecuado en lugar de la función. enviarcorreo electrónico
  • En ese sentido, tenga en cuenta las limitaciones de su cuenta de Gmail. Estos son diferentes para Google Workspace y/o tu cuenta privada. 

¿Cómo enviar correos electrónicos de activación desde Google Sheets?

Cuando una celda alcanza un cierto valor

Le mostraremos cómo enviar un correo electrónico automático según el valor de una celda. En nuestro ejemplo, la factura se enviará cuando la celda Importe de la factura llegue a "0", lo que indica un cliente abandonado. 

El valor de celda dado activa un correo electrónico de abandono personalizado para comunicarse inmediatamente con el cliente. Y nuevamente, los pasos de automatización siguen siendo los mismos, aún puedes usar el activador mensual para estos correos electrónicos. 

Tenga en cuenta que el script es el mismo que utilizamos para enviar correos electrónicos y archivos adjuntos HTML. Pero tiene otra capa de funcionalidad para introducir la lógica condicional descrita. Aquí está el código. 

function sendEmailReminders() { // Obtener la hoja activa var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Obtener el rango de datos (excluyendo la fila del encabezado) var dataRange = Sheet.getRange(2, 1, Sheet.getLastRow() - 1, Sheet.getLastColumn()); // Obtener los valores del rango de datos var data = dataRange.getValues(); // Recorre las filas de datos for (var i = 0; i < data.length; i++) { var row = data[i]; // Obtener los valores de cada columna var businessName = fila[0]; var correo electrónico = fila[1]; var NúmeroFactura = fila[2]; var importefactura = fila[3]; var fecha de vencimiento = fila[4]; var asunto = fila[5]; // Determinar el cuerpo del correo electrónico según el monto de la factura var emailBodyHtml; if (invoiceAmount == 0) { // Asunto del correo electrónico de deserción de clientes = "Notificación de deserción de clientes"; emailBodyHtml = "<html><head><estilo>" + "cuerpo {familia de fuentes: Arial, sans-serif;}" + "p {tamaño de fuente: 14px;}" + ".invoice-info {font-weight: negrita; color: #4a4a4a;}quot; + "</estilo></cabeza><cuerpo>" + "<p>Estimado " + nombre del negocio + ",</p>" + "<p>Hemos notado que el monto de su factura es $0. Lamentamos que se vaya y agradeceríamos cualquier comentario sobre por qué decidió dejar de utilizar nuestros servicios.</p>" + "<p>Si hay algo que podamos hacer para mejorar nuestros servicios o recuperar su negocio, háganoslo saber.</p>" + "<p>Gracias por tus negocios anteriores.</p>" + "</body></html>"; } else { // Correo electrónico de factura normal emailBodyHtml = "<html><head><style>" + "cuerpo {familia de fuentes: Arial, sans-serif;}" + "p {tamaño de fuente: 14px;}" + ".invoice-info {font-weight: negrita; color: #4a4a4a;}quot; + "</estilo></cabeza><cuerpo>" + "<p>Estimado <span class='info-factura'>" + nombre del negocio + "</span>,</p>" + "<p>Este es un recordatorio de que la Factura #<span class='invoice-info'>" + número de factura + "</span> por $<span class='info-factura'>" + importe de la factura + "</span> vence el <span class='invoice-info'>" + fecha de vencimiento + "</span>.</p>" + "<p>Busque la factura adjunta.</p>" + "<p>Gracias por su pronta atención a este asunto.</p>" + "</body></html>"; } // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (invoiceFiles.hasNext()) { archivofactura = archivosfactura.próximo(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } // Envía el correo electrónico con el archivo adjunto MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml, archivos adjuntos: [archivofactura] }); } }

Hasta el código de ruptura 

Tenga en cuenta que solo nos centramos en lo que hay en la función para evitar repetir lo que ya se describió. correo electrónicoCuerpoHtml

La parte actualizada del código determina el contenido del cuerpo del correo electrónico en función del importe de la factura. Si el importe de la factura es , se supone que es un cliente abandonado y se utiliza una plantilla de correo electrónico diferente. Aquí hay un desglose del código: '0'

var correo electrónicoBodyHtml;

Declara una variable denominada y almacena el contenido del cuerpo del correo electrónico. E inicialmente se deja sin definir.emailBodyHtml

if (montofactura == 0) { ... }

El extracto comprueba si el importe de la factura es 0. Si es así, se ejecutará el código entre llaves. Este bloque contiene la plantilla de correo electrónico de abandono del cliente.if(`{}`)

asunto = "Notificación de abandono de clientes";

La línea establece el asunto del correo electrónico en para clientes abandonados."Notificación de abandono de cliente"

emailBodyHtml = "<html><head><estilo>" +...

 La línea establece el valor de la variable de la plantilla de correo electrónico de abandono del cliente. La plantilla es una cadena HTML con estilos CSS definidos en la sección. El cuerpo del correo electrónico contiene marcadores de posición para el nombre de la empresa y un mensaje para el cliente.emailBodyHtml<head>

} demás { ... }

El bloque se ejecuta cuando el importe de la factura no es 0. Establece la variable en la plantilla de correo electrónico de factura normal. La plantilla de correo electrónico es una cadena HTML con estilos CSS definidos en la sección. El cuerpo del correo electrónico contiene marcadores de posición para el nombre comercial, el número de factura, el monto de la factura y la fecha de vencimiento.elseemailBodyHtml<head>

Al utilizar esta lógica condicional, la secuencia de comandos envía un cuerpo de correo electrónico diferente según si el monto de la factura es (cliente abandonado) o distinto de cero (factura normal). 0

Cuando el valor de la celda cambia

Ahora, tomaremos el mismo script usado anteriormente y lo ampliaremos para cubrir otro caso de uso: un cliente actualiza y el administrador de cuentas necesita enviar un correo electrónico de agradecimiento con una factura. 

Para explicarlo, la idea es que cada mes el administrador de cuentas tenga una nueva Hoja (Hoja 2 en nuestro ejemplo) con las credenciales de los clientes. 

El código ahora comparará las dos hojas y enviará un correo electrónico automático de agradecimiento, en lugar del correo electrónico de factura normal, a los clientes que actualizaron (su Importe de la factura es más grande respecto al anterior). 

Además, no es necesario tocar el correo electrónico de abandono, ya que existe la posibilidad de que alguien haya decidido dejar de usar nuestro servicio imaginario. Aquí está el guión.

function sendEmailReminders() { var hoja1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja1"); var hoja2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja2"); var dataRange1 = hoja1.getRange(2, 1, hoja1.getLastRow() - 1, hoja1.getLastColumn()); var dataRange2 = hoja2.getRange(2, 1, hoja2.getLastRow() - 1, hoja2.getLastColumn()); var datos1 = rango de datos1.getValues(); var datos2 = rango de datos2.getValues(); for (var i = 0; i < datos1.length; i++) { var fila1 = datos1[i]; var fila2 = datos2[i]; var nombreNegocio = fila1[0]; var correo electrónico = fila1[1]; var número de factura = fila1[2]; var importefactura1 = parseFloat(row1[3].toString().replace('$', '').replace(',', 39;.')); var facturaAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Montos de factura no válidos para empresas: " + nombre de negocio + ". importe de factura1: " + importe de factura1 + ", importe de factura2: " + importe de factura2 ); continuar; } var fecha de vencimiento = fila1[4]; var sujeto; var correo electrónicoBodyHtml; if (montofactura1 <montofactura2) { console.log("Enviando correo electrónico de "Gracias por actualizar' a " + correo electrónico + ". Importe factura1: " + Importe factura1 + ", Importe factura2: " + importe de la factura2); sujeto = "Gracias por actualizar"; emailBodyHtml = "<html><cuerpo>" + "<p>Estimado " + nombre del negocio + ",</p>" + "<p>¡Gracias por actualizar! Apreciamos su negocio y esperamos poder servirle.</p>" + "<p>Saludos cordiales,</p>" + "<p>Su Empresa</p>" + "</body></html>"; MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Enviando un correo electrónico de 'notificación de abandono de cliente' a " + correo electrónico + ". billAmount1: " + billAmount1); asunto = "Notificación de abandono de clientes"; emailBodyHtml = "<html><head><estilo>" + "cuerpo {familia de fuentes: Arial, sans-serif;}" + "p {tamaño de fuente: 14px;}" + ".invoice-info {font-weight: negrita; color: #4a4a4a;}quot; + "</estilo></cabeza><cuerpo>" + "<p>Estimado " + nombre del negocio + ",</p>" + "<p>Hemos notado que el monto de su factura es $0. Lamentamos que se vaya y agradeceríamos cualquier comentario sobre por qué decidió dejar de utilizar nuestros servicios.</p>" + "<p>Si hay algo que podamos hacer para mejorar nuestros servicios o recuperar su negocio, háganoslo saber.</p>" + "<p>Gracias por tus negocios anteriores.</p>" + "</body></html>"; MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody:correo electrónicoBodyHtml }); } else { console.log("Enviando un correo electrónico de 'Recordatorio de factura' a " + correo electrónico + ". Importe factura1: " + Importe factura1 + ", Importe factura2: " + Importe factura2); asunto = "Recordatorio de factura"; emailBodyHtml = "<html><head><estilo>" + "cuerpo {familia de fuentes: Arial, sans-serif;}" + "p {tamaño de fuente: 14px;}" + ".invoice-info {font-weight: negrita; color: #4a4a4a;}quot; + "</estilo></cabeza><cuerpo>" "<p>Estimado <span class='invoice-info'>" + nombre del negocio + "</span>,</p>" + "<p>Este es un recordatorio de que la Factura #<span class='invoice-info'>" + número de factura + "</span> por $<span class='info-factura'>" + importefactura1 + "</span> vence el <span class='invoice-info'>" + fecha de vencimiento + "</span>.</p>" + "<p>Busque la factura adjunta.</p>" + "<p>Gracias por su pronta atención a este asunto.</p>" + "</body></html>"; // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var BillFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml, archivos adjuntos: [invoiceFile] }); } } }</p>" + "</body></html>"; // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var BillFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml, archivos adjuntos: [invoiceFile] }); } } }</p>" + "</body></html>"; // Adjunte la factura correspondiente: debe proporcionar el ID de carpeta correcto donde se almacenan sus facturas var BillFolderId = 'YOUR_FOLDER_ID_HERE'; var facturaFolder = DriveApp.getFolderById(invoiceFolderId); var archivosfactura = carpetafactura.getFilesByName(númerofactura + '.pdf'); // Suponiendo que los archivos de facturas estén en formato PDF var factureFile; if (archivosfactura.hasNext()) { archivofactura = archivosfactura.next(); } else { // Si no se encuentra el archivo de factura, puede omitir esta fila o registrar un error console.error("Archivo de factura no encontrado para el número de factura: " + número de factura); continuar; } MailApp.sendEmail({ a: correo electrónico, asunto: asunto, htmlBody: emailBodyHtml, archivos adjuntos: [invoiceFile] }); } } }

Hasta el código de ruptura 

1. El script comienza obteniendo referencias tanto a la Hoja1 como a la Hoja2.

var hoja1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja1"); var hoja2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja2");

2. Luego recupera los datos de ambas hojas, comenzando desde la segunda fila para excluir los encabezados.

var dataRange1 = hoja1.getRange(2, 1, hoja1.getLastRow() - 1, hoja1.getLastColumn()); var dataRange2 = hoja2.getRange(2, 1, hoja2.getLastRow() - 1, hoja2.getLastColumn()); var datos1 = rango de datos1.getValues(); var datos2 = rango de datos2.getValues();

3. El script itera sobre las filas de ambas hojas (asumiendo que el número de filas es el mismo en ambas hojas). Compara los importes de las facturas de la Hoja1 y la Hoja2 para cada fila correspondiente.

for (var i = 0; i < datos1.length; i++) { var fila1 = datos1[i]; var fila2 = datos2[i]; // Obtener los importes de las facturas de ambas hojas var factureAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var facturaAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.'));

Copiar

4. Luego, el script verifica las condiciones para enviar diferentes tipos de correos electrónicos según la comparación de los montos de las facturas de la Hoja 1 y la Hoja 2.

if (montofactura1 <montofactura2) { // Enviar "Gracias por actualizar" correo electrónico } else if (invoiceAmount1 == 0) { // Enviar "notificación de abandono de cliente" correo electrónico } else { // Enviar "Recordatorio de factura" correo electrónico }

Copiar

La comparación clave es, que verifica si el monto de la factura en la Hoja 1 es menor que el monto de la factura en la Hoja 2 para la misma fila (es decir, el mismo cliente). Si es verdadero, la secuencia de comandos supone que el cliente ha actualizado y envía un correo electrónico. De lo contrario, verifica otras condiciones (abandono o recordatorios regulares de facturas) y envía el correo electrónico apropiado.if (montofactura1 <montofactura2)"Gracias por actualizar"

Cuando se actualiza un archivo de Google Sheets

Ahora vale la pena discutir un caso de uso diferente, donde otras personas además del administrador de cuentas tienen acceso a la hoja de cálculo. 

Supongamos que nuestro gerente de cuentas tiene un día dedicado a conocer clientes y responder sus preguntas. Los clientes tienen acceso a una hoja de cálculo donde pueden describir brevemente el problema y reservar una plaza. 

Bien, hay formas mucho mejores de gestionar las reservas y consultas de los clientes. Pero nos atendremos a este enfoque por el bien del tutorial.

Paso 1

Primero, necesitamos crear una tabla. Como se muestra a continuación, el nuestro es bastante simple y contiene solo tres filas con Administrador, Intervalo de tiempo y Consulta.

Paso 2

A continuación, necesita secuencias de comandos de Google para activar correos electrónicos cada vez que alguien actualice la hoja con su consulta, reservando así un espacio. He aquí un ejemplo. 

//@OnlyCurrentDoc función ProcessEdit(e) { MailApp.sendEmail({ a: "[email protected]" ;, asunto: "Nueva reserva - franja horaria del cliente", cuerpo: "Un cliente tiene una pregunta para usted" }); }

Copiar

Para ayudarle a comprender lo que sucede, vale la pena analizar las funciones principales. 

  • //@OnlyCurrentDoc : esta anotación indica que desea que el script se ejecute solo en la hoja de Google especificada. Eliminar la anotación habilitó el script en sus otros archivos. 
  • función ProcessEdit () : un disparador (lo configuraremos en el siguiente paso) ejecuta el script con esta función. Simplemente, la función configura el proceso para recibir un correo electrónico cada vez que alguien actualice la hoja.
  • (e) : esta anotación representa el objeto con datos sobre las ediciones. Tiene una propiedad de rango para indicar que se editó un rango o una celda. 
  • MailApp: un objeto que utiliza la función para transmitir el correo electrónico. 

Antes de continuar, puedes probar la hoja y el código. Si está utilizando la hoja de ejemplo, simplemente complete una de las celdas debajo de la columna Consulta y ejecute el script. El correo electrónico debería llegar a su bandeja de entrada inmediatamente, pero tenga en cuenta que el script aún no se ha automatizado.

Paso 3

Es hora de configurar y autorizar un disparador para enviar correos electrónicos automáticamente. En Apps Script, haga clic en el icono del despertador en el menú lateral. Luego, haga clic en “…crear un nuevo activador”. 

En la ventana emergente de configuración del activador, seleccione los siguientes criterios.

  • proceso
  • Cabeza
  • De hoja de cálculo
  • En edición

Nota: Está bien si mantienes la Configuración de notificación de errores de forma predeterminada, pero puedes cambiarla. eso si es necesario. No afectará el funcionamiento general del disparador ni del script. Esto puede aplicarse a cualquiera de los scripts de Google que desee automatizar. 

Haga clic en Guardar, autorice el activador en su cuenta y lo verá en . Lista de activadores . Además, asegúrese de presionar el botón Implementar para activar el activador. 

Ahora puede volver a la hoja, completar otra celda en la columna Consulta y verificar si recibió la notificación automática. 

Nota al margen: Puedes personalizar la hoja según tus preferencias, pero esto significa que también necesitarás personalizar el script.

Tags: #HOW-TO

Jengibre 2.7.53.0

Jengibre 2.7.53.0

Ginger es un corrector ortográfico y gramatical gratuito.

Bloques

Bloques

Blocks es un juego intelectual para que los alumnos de 3º de primaria practiquen sus habilidades de detección y visión y está incluido por los profesores en el programa de apoyo a la enseñanza de TI.

Prezi 6.26

Prezi 6.26

Prezi es una aplicación gratuita que te permite crear presentaciones digitales, tanto online como offline.

Matemáticas

Matemáticas

Mathway es una aplicación muy útil que puede ayudarte a resolver todos aquellos problemas matemáticos que requieren una herramienta más compleja que la calculadora integrada en tu dispositivo.

Presentador de Adobe

Presentador de Adobe

Adobe Presenter es un software de aprendizaje electrónico lanzado por Adobe Systems y disponible en la plataforma Microsoft Windows como un complemento de Microsoft PowerPoint.

Tucán 2.3.0

Tucán 2.3.0

Toucan es una plataforma tecnológica educativa. Le permite aprender un nuevo idioma mientras navega por sitios web comunes y cotidianos.

ESetViet 24.2

ESetViet 24.2

eNetViet es una aplicación que ayuda a conectar a los padres con la escuela donde estudian sus hijos para que puedan comprender claramente la situación de aprendizaje actual de sus hijos.

Duolingo

Duolingo

Duolingo - Aprende Idiomas Gratis, o simplemente Duolingo, es un programa educativo que te permite aprender y practicar muchos idiomas diferentes.

Escritura rápida

Escritura rápida

RapidTyping es una herramienta de entrenamiento de teclado conveniente y fácil de usar que lo ayudará a mejorar su velocidad de escritura y reducir los errores ortográficos. Con lecciones organizadas para muchos niveles diferentes, RapidTyping le enseñará cómo escribir o mejorar sus habilidades existentes.

Matemáticas 7.4.10.53

Matemáticas 7.4.10.53

MathType es un software de ecuaciones interactivas del desarrollador Design Science (Dessci), que le permite crear y anotar notaciones matemáticas para procesamiento de textos, presentaciones, aprendizaje electrónico, etc. Este editor también se utiliza para crear documentos TeX, LaTeX y MathML.