弹出仅对文档所有者显示

Pop up to only show for the doc owner

我有以下脚本,用于在打开文档时弹出一个简单的窗口。有什么方法可以让这个弹出窗口只显示给 sheet 所有者,而不显示给文档共享的所有其他人?

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

我的用例是只有我作为文档所有者才能看到的消息,我不希望任何其他具有共享权限的人(即客户)看到。

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

如果我的理解是正确的,这个修改怎么样?

修改点:

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

  • 所有者打开电子表格时,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() returns 值。所以该值需要与注册用户的值进行比较。在这个示例脚本中,假设如下。

  • "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个用户测试这个情况的时候,发现了新的问题。

首先,它假设如下。

  • 电子表格由 3 个用户共享和使用,他们是所有者 user1 和 user2。
  • 当打开电子表格时函数是运行onOpen_sample(){}
  • 当所有者和用户 1 可以 运行 脚本并打开对话框时 ui.alert("TEXT HERE")

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

  1. 所有者安装 onOpen_sample() 作为 OnOpen 的触发器。
    • Session.getActiveUser().getEmail() returns 所有者的电子邮件。
    • Session.getEffectiveUser().getEmail() returns 所有者的电子邮件。
  2. User1 安装 onOpen_sample() 作为 OnOpen 的触发器。
    • Session.getActiveUser().getEmail() return没有价值。
    • Session.getEffectiveUser().getEmail() returns user1 的邮箱。

这里,

  1. User2 没有安装 onOpen_sample() 作为 OnOpen 的触发器。
    • Session.getActiveUser().getEmail() return没有价值。
    • Session.getEffectiveUser().getEmail() returns 用户 1 的电子邮件。
      • 这不是所有者的电子邮件。

此外,

  1. User2 安装 onOpen_sample() 作为 OnOpen 的触发器。
    • Session.getActiveUser().getEmail() return没有价值。
    • Session.getEffectiveUser().getEmail() returns 所有者的电子邮件。
      • 这不是 user2 的邮箱。

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

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

从这种情况来看,在现阶段,发现如下结果。

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

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