Javascript 从OneEdit函数创建对话框提示框是';行不通
每当编辑某个列时,我都会尝试为Google工作表文件创建一个对话框提示。每当我手动运行它时,提示符就会打开,但由于某种原因,当我尝试在onEdit函数中运行它时,它会停止工作。正如下面的代码和日志所示,错误似乎发生在结果变量上,因为此时记录器停止输出内容。任何帮助都将不胜感激,提前谢谢 代码:Javascript 从OneEdit函数创建对话框提示框是';行不通,javascript,google-apps-script,google-sheets,triggers,Javascript,Google Apps Script,Google Sheets,Triggers,每当编辑某个列时,我都会尝试为Google工作表文件创建一个对话框提示。每当我手动运行它时,提示符就会打开,但由于某种原因,当我尝试在onEdit函数中运行它时,它会停止工作。正如下面的代码和日志所示,错误似乎发生在结果变量上,因为此时记录器停止输出内容。任何帮助都将不胜感激,提前谢谢 代码: function onEdit(e){ Logger.log("onEdit"); var spreadSheet = e.source; var sheet
function onEdit(e){
Logger.log("onEdit");
var spreadSheet = e.source;
var sheet = spreadSheet.getActiveSheet();
var sheetName = sheet.getName();
if(sheetName =='Sheet1' && e.range.columnStart == 23){
Logger.log("should be running email prompt");
emailPrompt();
}
}
function emailPrompt() {
Logger.log("Reaching email prompt");
var ui = SpreadsheetApp.getUi();
Logger.log("ui");
var result = ui.prompt(
'Email Template',
'Please edit the email:',
ui.ButtonSet.OK_CANCEL);
Logger.log("result");
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
//Insert Code to select email
ui.alert('Your name is ' + text + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('Email cancelled');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('Email cancelled.');
}
}
[20-07-10 15:21:09:472 CDT] onEdit
[20-07-10 15:21:11:198 CDT] should be running email prompt
[20-07-10 15:21:11:199 CDT] Reaching email prompt
[20-07-10 15:21:11:201 CDT] ui
日志:
function onEdit(e){
Logger.log("onEdit");
var spreadSheet = e.source;
var sheet = spreadSheet.getActiveSheet();
var sheetName = sheet.getName();
if(sheetName =='Sheet1' && e.range.columnStart == 23){
Logger.log("should be running email prompt");
emailPrompt();
}
}
function emailPrompt() {
Logger.log("Reaching email prompt");
var ui = SpreadsheetApp.getUi();
Logger.log("ui");
var result = ui.prompt(
'Email Template',
'Please edit the email:',
ui.ButtonSet.OK_CANCEL);
Logger.log("result");
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
//Insert Code to select email
ui.alert('Your name is ' + text + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('Email cancelled');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('Email cancelled.');
}
}
[20-07-10 15:21:09:472 CDT] onEdit
[20-07-10 15:21:11:198 CDT] should be running email prompt
[20-07-10 15:21:11:199 CDT] Reaching email prompt
[20-07-10 15:21:11:201 CDT] ui
编辑:设置可安装触发器
编辑2:设置可安装的触发器成功了,非常感谢!我现在唯一的问题是这张表是为我工作的公司写的,他们想拥有可安装的触发器。但是,提示似乎只针对拥有触发器的人显示。如果其他人试图编辑函数并打开提示。出现以下错误:
您无权在onEdit_sendEmail(onEdit:42)的emailPrompt(onEdit:54)上调用prompt–
所以,现在我必须弄清楚如何使这个触发器适用于任何有权访问电子表格的人。谢谢 简单触发器有几个限制。改用可安装的触发器
注意:不要使用保留函数名(
onOpen
,onEdit
,onSelectionChange
,doPost
,doGet
,onInstall
)对于将由可安装触发器调用的函数,其中一些函数可能会为同一事件调用两次,而其他函数可能会由不同的事件调用,这可能会造成混淆。使用简单触发器触发的函数必须在30秒内完成。您可以尝试安装触发器,但请注意鲁本在下面回答中的警告。错误率显示为100%。执行页面上记录了哪些错误?您没有权限在onEdit_sendEmail(onEdit:42)的emailPrompt(onEdit:54)上调用prompt。好的,我实际上是通过登录我公司的Gmail帐户(拥有触发器)来实现的。有没有办法让其他不拥有触发器的人可以毫无问题地运行它?