根据用户响应显示另一个警报:确定或取消

时间:2016-06-25 07:28:36

标签: javascript google-apps-script triggers google-sheets

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

我已经整理了一个非常简单的代码示例,该示例展示了如果第一个ui.alert单击“确定”就会出现第二个ui.alert的问题。

function myFunction() {

   var ui = SpreadsheetApp.getUi()  
   var response = ui.alert('Test', 'Test', ui.ButtonSet.OK_CANCEL);

   if (response.OK) {
      ui.alert('OK'); 
   }

}

Screenshot of trigger set up is here:

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

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

你应该首先编辑一个单元格ui.alert,你单击OK然后再出现第二个ui.alert。我试图在你尝试时发生的是第二个ui.alert不会发生。

有什么建议吗?这是权限吗?

3 个答案:

答案 0 :(得分:2)

您正在错误地比较回复。而不是

if (response.OK) 

应该是

if (response == ui.Button.OK) 

使用枚举Button

答案 1 :(得分:0)

试试这样:

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')
  }

}

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

Unity3D

答案 2 :(得分:0)

我也遇到了与BOUND SCRIPT相同的问题。

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

当我与同一实例中的另一个用户共享doc时,初始Ui.Alert显示但是他们的响应永远不会从Alert返回,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块中包装它并且什么都没得到!

  

<强>胡迭-安特萨纳
  &#34; ...哦,这来自权限和应用程序权限,用户必须   允许该应用程序为其帐户运行,即使其他用户拥有该帐户   编辑工作表的权利。

你能否进一步详细说明这与问题有关?

由于