根据用户响应显示另一个警报:OK或Cancel

Display another alert depending on user response: OK or Cancel

本文关键字:OK Cancel 另一个 用户 响应 显示      更新时间:2023-09-26

我有一个谷歌表,我已经设置了一个onEdit触发器弹出一个ui。编辑单元格时发出警报。然后,我想根据用户选择OK还是Cancel来执行一个操作。当我使用表单作为创建触发器和脚本的用户时,这一切都很好。如果我将工作表(具有编辑权限)共享给其他人,当他们编辑单元格时,脚本运行,但当他们单击"确定"或"取消"时,我无法获得响应。脚本就这样停止了。执行记录中没有显示任何内容,即使我输入了日志信息,也没有记录任何内容。

我整理了一个非常简单的代码示例,展示了第二个ui的问题。alert.

function myFunction() {
   var ui = SpreadsheetApp.getUi()  
   var response = ui.alert('Test', 'Test', ui.ButtonSet.OK_CANCEL);
   if (response.OK) {
      ui.alert('OK'); 
   }
}

触发器设置的截图在这里:

包含脚本的测试表的链接在这里:

https://docs.google.com/spreadsheets/d/1J16lpg9G1O8hQOxB-J1R4Oy0nsrxIkgWHBfaSl6bpVs/edit gid = 0

应该发生的是,您将首先编辑一个单元格ui。警报出现时,单击OK,然后单击第二个ui。警报出现。当你尝试第二个ui时,我希望发生的是。警报只是不发生。

建议吗?是权限问题吗?

您正在错误地比较响应。而不是

if (response.OK) 

应该是

if (response == ui.Button.OK) 

试一下:

 var ui = SpreadsheetApp.getUi();
 var response = ui.alert('test',test, ui.ButtonSet.OK_CANCEL);
 if (response == ui.Button.OK) {
     ui.alert('OK'); 
 } else {
     ui.alert('NOT OK')
 }

--------评论后编辑-----

function onEdit(e) {
//FIXED FOR OTHER USERS IF THE FUNCTION DOESN'T NEED OTHER PERMISSIONS (simple trigger onEdit)
  var ui = SpreadsheetApp.getUi()  
  var response = ui.alert('Test', 'Test', ui.ButtonSet.OK_CANCEL);
  if (response == ui.Button.OK) {
     ui.alert('OK'); 
  } else {
     ui.alert('NOT OK')
  }
}

我也遇到了与BOUND脚本完全相同的问题。

我作为表的创建者/所有者没有任何问题。

当我与同一实例内的另一个用户共享文档时,初始Ui。警报显示,但他们的响应从来没有从警报返回,var结果没有得到设置,事实上,如果我添加一行后直接设置结果,它永远不会到达那里?

var result = ui.alert(
    'Approve leave for ' + ApplicantName +' ?',
    'An approval email will now be sent to ' + EmailAddress.toLowerCase() + ' do you want to continue ?',
     ui.ButtonSet.YES_NO);
Logger.log('Leave approve popup selection = ' + result.toString());//this is not executed

我甚至尝试在try catch块中包装它,但一无所获!

Juan-Diego-Antezana
"…这来自于权利和应用权限,用户必须允许应用程序在他的账户上运行,即使其他用户有编辑工作表的权利。

你能进一步详细说明一下吗?因为这似乎与这个问题有关。

谢谢