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

0
Cen Eg 6 feb. 2020 a las 11:27

2 respuestas

La mejor respuesta

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

}

0
JPV 6 feb. 2020 a las 11:57

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 hojas IMPORTRANGE
  • 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 celda E2.
  • 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);
}
0
ziganotschka 6 feb. 2020 a las 11:03