繁体   English   中英

当单元格值更改时运行函数(onEdit 函数)

[英]Run a function when a cell value changes (onEdit Function)

在下面的表格中:

https://docs.google.com/spreadsheets/d/1F22Z19gi9WRaYbsrvlDyuiJX5VXfppAlCPzB5bjdMN8/edit?usp=sharing

在脚本编辑器中,我添加了以下代码:

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);
    }
  }
}

目的是在sheet2中更改“C2”单元格值时触发MailApp功能

我测试了相同的脚本,但在 sheet1(在其中添加单元格值)并且它有效,但是,当我尝试在 sheet2(从 sheet1 复制值的位置)上应用时,脚本不起作用。 任何帮助,提前致谢

请注意该表是可编辑的,因此非常欢迎您编辑脚本

如何触发非人工编辑的触发器

  • 简单和可安装的 Apps Script onEdit触发器都仅限于人为更改
  • 此外,简单的触发器

无法访问需要授权的服务。 例如,简单触发器无法发送电子邮件,因为 Gmail 服务需要授权,但简单触发器可以使用匿名的语言服务翻译短语。

一种解决方法是通过可安装的onChange trigger替换onEdit onChange trigger

  • onchange触发器的限制较少,例如它可以由表单公式IMPORTRANGE触发
  • 您需要做的是创建一个新的空电子表格,并将公式IMPORTRANGE("paste here the spreadsheet_url of the original spreadsheet", "Sheet2!E2")单元格E2
  • 点击Allow access
  • 现在,原始电子表格“Sheet2”中“E2”的每次更新都会更新新电子表格 - 这将触发 onChange 触发器。

只需修改您的代码如下:

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);
}

聊天后,我们决定将邮件发送到已经可用的 doPost() 函数中。

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM