sheets scripts script openbyurl macro google ejemplos docs developers developer apps app google-apps-script google-spreadsheet

google-apps-script - scripts - openbyurl google script



No se permite ejecutar sendEmail() desde la función personalizada, pero sí en el editor de scripts (1)

He estado tratando de encontrar una forma de enviar una sola fila de datos a una dirección de correo electrónico específica en una hoja de cálculo "en vivo / en ejecución" que estoy usando dentro de mi dominio, para realizar un seguimiento de los conductores de camiones y sus números de recogida. Logré juntar este pequeño código usando Google Apps Script Editor disponible en hojas:

function sendEmail() { var sheet = SpreadsheetApp.getActiveSheet(); var activeRow = sheet.getActiveCell().getRow(); var cellID = "H" + activeRow; var dataRange = sheet.getRange(activeRow, 1, 1, 6); var EMAIL_SENT = "EMAIL_SENT"; var data = dataRange.getValues(); Logger.log(data[0][0]); var emailAddress = [email protected]; var message = data; var subject = "CG-PU#"; var emailSent = sheet.getRange(cellID).getValue(); if (emailSent != "EMAIL_SENT") { MailApp.sendEmail(emailAddress, subject, message); var cell = sheet.getRange(cellID); cell.setValue(EMAIL_SENT); } } SpreadsheetApp.flush(); }

De cualquier forma puedo llamar a la función desde una celda en mi hoja de cálculo como =sendEmail() y debe enviar la información solo de la fila activa, y luego marcar esa fila como EMAIL_SENT para que no vuelva a hacerlo accidentalmente.

El script funciona perfectamente si lo ejecuto desde dentro del editor de scripts, y si codigo la dirección de correo electrónico, pero si intento ejecutarlo desde la hoja de cálculo, recibo el mensaje -> error: no tiene permiso para llamar a sendEmail ( línea 19, archivo "CPS_sendEmail.gs").

¡Cualquier ayuda con esto es muy apreciada! Sería útil evitar que mi usuario vuelva a ejecutar MS Excel y Outlook. Cuando funcione esta parte de ella, me gustaría que la función muestre una lista de direcciones de las que el usuario puede seleccionar, o alguna otra forma de evitar que el usuario tenga que recordar y escribir la dirección del controlador y transportista, pero me encantaría tener todo esto funcionando como se esperaba.

El script solo debería poder ejecutarse en mi dominio de Google con mis usuarios, y la primera vez que lo ejecuté, estaba seguro de haber pasado por el proceso de autorización, pero no entiendo realmente esa parte de las cosas.

Actualmente están usando MS Excel / Outlook y copian y pegan la fila en un correo electrónico del que pueden usar sus contactos para seleccionar. Si no puedo obtener la función de usar Contactos de Google, estaba considerando crear una hoja de controladores con una función de búsqueda o algo así - algo doloroso tener que mantener una lista cuando los contactos están ahí - pero ya haz lo que tienes que hacer !


Leer los permisos y las funciones personalizadas . Dado que las funciones personalizadas (scripts llamados desde funciones de hoja de cálculo) están abiertas a cualquier usuario de una hoja de cálculo, no se les permite usar ningún servicio que requiera autenticación. Es por eso que no puedes enviar correos desde uno.

Esto es diferente al proceso de Autorización de un script para acceder a sus servicios. Eso hace que el mensaje de error sea confuso, pero puede estar seguro de que fue solo la forma en que invocó el script.

Sin embargo, no es problema, porque una función personalizada es una mala forma de realizar este tipo de acción de todos modos, porque la función se volverá a evaluar cada vez que haya un cambio en la hoja de cálculo, enviando muchos más correos electrónicos de los que desea.

Le recomiendo que cree un elemento de menú para esta operación en su lugar. (Consulte el código de muestra proporcionado en el editor si crea una nueva secuencia de Spreadsheet.) El flujo de trabajo sería mover el cursor a la fila que desea procesar, luego use el menú para "Hacerlo así", que invocaría su secuencia de comandos.