弹出仅显示给文档所有者

时间:2019-02-23 14:58:34

标签: google-apps-script google-sheets popup

我有以下脚本,用于在打开文档时简单弹出。有什么办法可以使此弹出窗口仅显示给工作表所有者,而不是与文档共享的所有其他人?

function onOpen() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var Alert = ui.alert("TEXT HERE");
}

我的用例是作为我的文档所有者仅对我可见的一条消息,我不希望其他拥有共享权限的人(例如客户)看到。

1 个答案:

答案 0 :(得分:1)

  • 您只想在所有者打开电子表格时打开对话框。
  • 不是所有者的共享用户打开电子表格时,您不想打开对话框。

如果我的理解是正确的,那么该修改如何?

修改点:

在此修改中,它知道所有者是否通过检索活动用户的电子邮件来打开电子表格。

  • 所有者打开电子表格时,Session.getActiveUser().getEmail()的值是所有者的电子邮件。
  • 不是所有者的用户打开电子表格时,不会检索到Session.getActiveUser().getEmail()的值。

使用。

修改后的脚本:

function onOpen() {
  var email = Session.getActiveUser().getEmail();
  if (email) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ui = SpreadsheetApp.getUi();
    var Alert = ui.alert("TEXT HERE");
  }
}

注意:

  • 对于您的脚本,不需要安装该功能作为OnOpen的可安装触发器。
  • 即使已安装OnOpen的可安装触发器,当用户打开电子表格时,也不会检索到Session.getActiveUser().getEmail()的值。所以我认为可以使用。当时,Session.getActiveUser().getEmail()拥有所有者的电子邮件。

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

编辑1:

如果所有用户都安装了触发器,则Session.getEffectiveUser().getEmail()返回该值。因此,需要将该值与注册用户的值进行比较。在此示例脚本中,它假定如下。

  • “ email1”和“ email2”的用户由每个用户安装OnOpen的可安装触发器。

示例脚本:

var users = ["email1", "email2",,,]; // Please set emails of users who can open the dialog.
var email = Session.getEffectiveUser().getEmail();
if (users.indexOf(email) > -1) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ui = SpreadsheetApp.getUi();
  var Alert = ui.alert("TEXT HERE");
}

编辑2:

当我刚刚由3个用户测试这种情况时,我注意到了新问题。

首先,它假定如下。

  • 电子表格由所有者,用户1和用户2的3个用户共享和使用。
  • 打开电子表格后,功能会运行onOpen_sample(){}
  • 所有者和user1可以运行脚本并打开对话框ui.alert("TEXT HERE")

在这种情况下,可获得以下结果。

  1. 所有者安装了onOpen_sample()作为OnOpen的触发器。
    • Session.getActiveUser().getEmail()返回所有者的电子邮件。
    • Session.getEffectiveUser().getEmail()返回所有者的电子邮件。
  2. User1安装了onOpen_sample()作为OnOpen的触发器。
    • Session.getActiveUser().getEmail()不返回任何值。
    • Session.getEffectiveUser().getEmail()返回用户1的电子邮件。

在这里

  1. User2不会安装onOpen_sample()作为OnOpen的触发器。
    • Session.getActiveUser().getEmail()不返回任何值。
    • Session.getEffectiveUser().getEmail()返回user1的电子邮件。
      • 这不是所有者的电子邮件。

此外,

  1. User2安装了onOpen_sample()作为OnOpen的触发器。
    • Session.getActiveUser().getEmail()不返回任何值。
    • Session.getEffectiveUser().getEmail()返回所有者的电子邮件。
      • 这不是用户2的电子邮件。

而且,当我多次安装OnOpen触发器时,即使user1和user2安装了触发器,Session.getEffectiveUser().getEmail()也只能返回所有者的电子邮件。

通过这些,所有用户都可以运行脚本并打开对话框。我以为您的问题可能就是这个。我认为这可能是一个错误。因此,我想将此报告给问题跟踪器。

从这种情况下,在当前阶段,发现以下结果。

  1. 只有所有者可以运行脚本并打开对话框。
  2. 特定用户无法运行脚本并打开对话框。

很抱歉您的问题尚未解决。如果找到解决方法,我想在这里报告。