En la hoja de abajo:
https://docs.google.com/spreadsheets/d/1F22Z19gi9WRaYbsrvlDyuiJX5VXfppAlCPzB5bjdMN8/edit?usp=sharing
Desde el editor de script, agregué el siguiente código:
function onEdit(e) {
var sheetName = 'Sheet2'
var cellName = 'C2'
var sortSheet = e.range.getSheet()
if (sortSheet.getName() === sheetName) {
if (e.range.getValue().length === cellName) {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var e = sh.getRange(2, 3).getValues();
var m = 'Test Message';
var subject = 'Test Subject';
MailApp.sendEmail(e, subject, m);
}
}
}
El propósito es activar la función MailApp cuando se cambia un valor de celda "C2" en sheet2
Probé el mismo script pero en la hoja 1 (donde agrego los valores de celda) y funcionó pero, sin embargo, cuando trato de aplicar en la hoja 2 (donde los valores se copian de la hoja 1), el script no funciona. Cualquier ayuda, gracias de antemano
Tenga en cuenta que la hoja es editable, por lo que puede editar el script
2 respuestas
Después de chatear, decidimos incorporar el correo dentro de la función doPost () ya disponible.
function doPost (e) {
....
var doc = SpreadsheetApp.getActive();
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'Timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
var email = newRow[1];
var subject = 'XXXXXXXXX';
var body = 'XXXXXXX';
MailApp.sendEmail(email, subject, body);
...... //rest of the code
}
Cómo disparar un disparador en edición no humana
- Tanto los desencadenantes de Apps Script simples como los
onEdit
son restringido a los cambios hechos por el hombre - Además, los simples disparadores
no puede acceder a servicios que requieren autorización. Por ejemplo, un disparador simple no puede enviar un correo electrónico porque el servicio de Gmail requiere autorización, pero un disparador simple puede traducir una frase con el servicio de idioma, que es anónimo.
Una solución alternativa sería reemplazar el activador onEdit
a través de un onChange trigger
instalable
- El activador
onchange
tiene menos limitaciones, p. puede activarse mediante la fórmula de hojasIMPORTRANGE
- Lo que debe hacer es crear una nueva hoja de cálculo vacía y pegar la fórmula
IMPORTRANGE("paste here the spreadsheet_url of the original spreadsheet", "Sheet2!E2")
en la celdaE2
. - haga clic en
Allow access
- Ahora cada actualización de "E2" en "Sheet2" de la hoja de cálculo original actualizará la nueva hoja de cálculo, y esto activará el activador onChange.
Simplemente modifique su código de la siguiente manera:
function onChange() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var e = sh.getRange(2, 3).getValue();
var m = 'Test Message';
var subject = 'Test Subject';
Logger.log("sending");
MailApp.sendEmail(e, subject, m);
}
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.