我编写了一个脚本,在本机电子表格中使用时效果很好。我现在尝试将其作为附加组件发布,并且发现onEdit(e)
不工作,当onOpen(e)
and onInstall(e)
工作正常。
我已经查看了有关授权模式和安装/启用附加组件的文档,但我认为我可能遗漏了一些东西(希望很简单),因为我是初学者。我应该以不同的方式调用这些函数吗?或者放置onEdit
?任何帮助表示赞赏。谢谢!!
function setup() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Send Auto Emails');
try {ss.setActiveSheet(ss.getSheetByName('Send Auto Emails'));}
catch (e) {ss.insertSheet('Send Auto Emails', 0);}
sheet.getRange(1, 1).setValue('Recipient Email Address');
//etc...
}
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = e.source.getActiveSheet();
var range = e.source.getActiveRange();
if (range.getA1Notation() == "C1" | range.getA1Notation() == "D1" | range.getA1Notation() == "E1" && sheet.getName() == "Send Auto Emails") {
Browser.msgBox(
'Alert',
'Feel free to change the title here to something more relevant to you. But be aware, if you would like to use an optional item, please make sure you are referencing it in your email message exactly as it appears here, wrapped in < and >. Example: <Optional Item 1>.',
Browser.Buttons.OK
);
}
if (range.getA1Notation() == "J4" && sheet.getName() == "Send Auto Emails") {
Browser.msgBox(
'Alert',
'Only add the email message body. "Hello, Recipient Name" and "Best, Your Name" will be automatically added. If you would like to use Optional Items in this message, see the example text to make sure you are using them the right way.',
Browser.Buttons.OK
);
}
if (range.getA1Notation() == "A2") {
ss.toast("Your data in column A must not be separated by any blank rows. Any data after a blank row will be ignored.", "Be aware", 90);
}
}
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createMenu('BulkEmail beta')
.addItem('1. Sheet Setup', 'setup')
.addItem('2. Send Emails', 'sendEmails')
.addToUi();
onEdit(e);
}
function onInstall(e) {
onOpen(e);
}
EDIT 1
我尝试创建一个可安装的触发器,而不是使用简单的触发器onEdit
,仍然无济于事。
function createonEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('installableonEdit')
.forSpreadsheet(ss)
.onEdit()
.create();
}
function installableonEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = e.source.getActiveSheet();
var range = e.source.getActiveRange();
try {
if (range.getA1Notation() == "C1" | range.getA1Notation() == "D1" | range.getA1Notation() == "E1" && sheet.getName() == "Send Auto Emails") {
Browser.msgBox(
'Alert',
'Feel free to change the title here to something more relevant to you. But be aware, if you would like to use an optional item, please make sure you are referencing it in your email message exactly as it appears here, wrapped in < and >. Example: <Optional Item 1>.',
Browser.Buttons.OK
);
}
if (range.getA1Notation() == "J4" && sheet.getName() == "Send Auto Emails") {
Browser.msgBox(
'Alert',
'Only add the email message body. "Hello, Recipient Name" and "Best, Your Name" will be automatically added. If you would like to use Optional Items in this message, see the example text to make sure you are using them the right way.',
Browser.Buttons.OK
);
}
if (range.getA1Notation() == "A2") {
ss.toast("Your data in column A must not be separated by any blank rows. Any data after a blank row will be ignored.", "Be aware", 90);
}
} catch(err) {
var errMsg = 'There was an error: ' + err +
+ " \n \n" +
'from the: onEdit function ' +
+ " \n \n" +
'The call stack is: ' + err.stack;
GmailApp.sendEmail('[email protected]', "error", errMsg);
}
}