ebr*_*ley 6 triggers google-sheets google-apps-script google-apps-script-addon
我编写了一个在本机电子表格中使用时效果很好的脚本。我现在试图将它发布为附加组件,但我发现它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);
}
Run Code Online (Sandbox Code Playgroud)
编辑 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);
}
}
Run Code Online (Sandbox Code Playgroud)
您的onOpen()触发器正在运行onEdit()触发器。 opOpen()安装并启用附加组件后,在 AuthMode.LIMITED 中运行。
在本文档中,它指出:
允许访问有限服务子集的模式(LIMITED)。当绑定到文档的附加组件或脚本执行 onOpen(e) 或 onEdit(e) 简单触发器时,会发生此(有限)模式,除了 NONE 描述的情况外。
您正在运行一个onOpen()简单的触发器,并且它在有限模式下运行,因为它位于附加组件中。
所以,这部分,我非常确定。
我相信您可以做的是创建一个可安装的编辑触发器,并以完整模式运行。所以,这就是我要尝试的,摆脱简单的触发器,并安装带有ScriptApp.
在文档中,它指出:
他们(简单的触发器)无法访问需要授权的服务。例如,简单的触发器无法发送电子邮件,因为 Gmail 服务需要授权,但简单的触发器可以使用匿名的语言服务翻译短语。
因此,该try/catch包括发送电子邮件,这会阻止onEdit()简单触发器工作。
在代码中添加try/catch,如果出现错误,请向自己发送电子邮件。
function onEdit(e) {try{
//Code Here
} 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('yourEmail@gmail.com', "Subject", errMsg);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |