我想在更新特定单元格(即文档)时向某人发送通知。具体来说,当更新一行中的单元格时,它会向同一行中列出的所有者发送通知。例如B47更新,它会向B3发送一封电子邮件。
当它指向一张纸时,我已经让脚本工作了。但是当我尝试让脚本运行多个工作表/标签时,我收到错误'找不到脚本功能:sendNotification'是否可以让此脚本适用于同一个Google文档中的多个工作表/标签?更新来自不同的来源,所以我想继续使用getSheetbyName而不是getActiveSheet。
非常感谢任何帮助。这是我的代码所在:
function shellFunction() {
var sheets = ['Arabic', 'Portuguese'];
for (var s in sheets) {
toTrigger(sheets[s]);
}
function toTrigger(sheetName) {
function sendNotification() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheets[s]);
var cell = ss.getActiveCell().getA1Notation();
var row = sheet.getActiveRange().getRow();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipients = sheet.getRange('J' + sheet.getActiveCell().getRowIndex()).getValue();
var message = '';
if (cell.indexOf('B') != -1) {
message = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue()
}
var subject = 'The ' + sheet.getRange('F' + sheet.getActiveCell().getRowIndex()).getValue() + ' ' + sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' needs your Translation';
var body = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' has been updated. Can you please update ' + sheet.getRange('G' + sheet.getActiveCell().getRowIndex()).getValue() + '? Please remember to update the date column in the Resource Document when the translation is complete:' + ss.getUrl();
MailApp.sendEmail(recipients, subject, body);
}
}
}
答案 0 :(得分:1)
该行
var sheet = ss.getSheetByName(sheets[s]);
改为
var sheet = ss.getSheetByName(sheetName);
因为那是传递的表格的名称?
修改强>
还有其他一些可能导致问题的项目。我对此结果进行了编辑:
function shellFunction() {
var sheets = ['Arabic', 'Portuguese'];
for (var s in sheets) {
toTrigger(sheets[s]);
}
}
function toTrigger(sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
var cell = ss.getActiveCell().getA1Notation();
var row = sheet.getActiveRange().getRow();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipients = sheet.getRange('J' + sheet.getActiveCell().getRowIndex()).getValue();
var message = '';
if (cell.indexOf('B') != -1) {
message = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue()
}
var subject = 'The ' + sheet.getRange('F' + sheet.getActiveCell().getRowIndex()).getValue() + ' ' + sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' needs your Translation';
var body = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' has been updated. Can you please update ' + sheet.getRange('G' + sheet.getActiveCell().getRowIndex()).getValue() + '? Please remember to update the date column in the Resource Document when the translation is complete:' + ss.getUrl();
MailApp.sendEmail(recipients, subject, body);
}
我的第一个改变是不嵌套功能。为此,我在toTrigger函数之前添加了一个结束花括号,并删除了代码中的最后一个。之后有另一个嵌套函数实际组成了所有toTrigger函数。它被称为sendNotifocation,它匹配您的错误。我通过删除toTrigger函数声明后面的行和代码末尾的另一个花括号来删除它。
最后,我进行了上述编辑。在我的测试中它似乎工作得很好,除了我注释掉实际发送电子邮件的调用,并且只是在那之前调试到该行。