我编写了一个脚本,在本机电子表格中使用时效果很好。我现在正尝试将它作为附加组件发布,并且发现它不起作用onEdit(e)
,何时工作正常。onOpen(e)
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);
}
编辑 1
我尝试创建一个可安装的触发器而不是使用 simple 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('elisabeth@groupon.com', "error", errMsg);
}
}