我有一个谷歌电子表格,我们提到了我们团队必须完成的某项任务。在一列下,我们维护任务状态。我添加了一个Google应用脚本,该脚本会在更改电子表格时触发。脚本的主要工作是向某些Google邮件群组发送有关更改的电子邮件通知。 在脚本中我使用Browser.msgBox()来获取是/否的输入。现在,如果我在电子表格中更改状态,弹出窗口将会在按钮上恢复并按下按钮的值。如果其他人在电子表格中进行了更改,则会获取弹出窗口,但是单击“是/否”按钮脚本时不会恢复。
我的脚本看起来像这样:
function statusChangeNotification(e) {
var user = e.user;
var sheet = e.source.getActiveSheet();
var range = e.range;
var val = e.value;
if(sheet.getName() == RESPONSE_SHEET && isStatusField(range)){
if(val == STATUS_YES){
var sendMail = Browser.msgBox("Status Changed", "Do you wanna send a status notification mail?", Browser.Buttons.YES_NO);
if(sendMail == "yes"){
// code to send email using MailApp.sendEmail()
}
}
}
}
在class browser reference下的Google开发者处,他们提到了
msgBox(标题,提示,按钮)
弹出一个带有给定标题,消息并指定的对话框 用户浏览器中的按钮。 msgBox方法引发了客户端 带有给定标题的消息框,显示给定的消息 用户,并提供要显示的按钮选择。注意 此方法导致服务器端脚本被挂起。它会 用户清除对话框后自动恢复,但JDBC 连接不会在暂停期间持续存在。
对于其他人调用Browser.msgBox()后,脚本无法恢复的问题是什么?请提出一些替代方案以实现相同目标。
答案 0 :(得分:1)
请参阅以下主题:
Quiet .hashCode() death of a script (GAS)
此外,此记录的GAS问题:
https://code.google.com/p/google-apps-script-issues/issues/detail?id=2697
对于脚本+电子表格所有者以外的所有用户,/ dr脚本将在Browser.msgBox()之后失败
答案 1 :(得分:0)
据我所知,您在弹出确认后使用onEdit
触发器发送电子邮件。 onEdit触发器是一个简单的触发器,它的范围有限。
您无法使用onEdit事件发送电子邮件。您将不得不使用可安装触发器,如时间驱动触发器等。
为了更好地理解触发器及其范围,您可以检查这两个参考链接。