![](/img/trans.png)
[英]When I edit any cell, I need a function to run. I tried onEdit but it's not getting trigger the function
[英]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 复制值的位置)上应用时,脚本不起作用。 任何帮助,提前致谢
请注意该表是可编辑的,因此非常欢迎您编辑脚本
无法访问需要授权的服务。 例如,简单触发器无法发送电子邮件,因为 Gmail 服务需要授权,但简单触发器可以使用匿名的语言服务翻译短语。
一种解决方法是通过可安装的onChange trigger
替换onEdit
onChange trigger
onchange
触发器的限制较少,例如它可以由表单公式IMPORTRANGE
触发IMPORTRANGE("paste here the spreadsheet_url of the original spreadsheet", "Sheet2!E2")
单元格E2
。Allow access
只需修改您的代码如下:
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.