google-apps-script - 弹出只为文档所有者显示
问题描述
我有以下脚本,用于在打开文档时简单弹出。有没有办法让这个弹出窗口只显示给工作表所有者,而不是显示给与文档共享的所有其他人?
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()
则返回该值。因此需要与注册用户的值进行比较。在这个示例脚本中,它假设如下。
- "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(){}
打开电子表格时运行函数。- 当所有者和用户 1 可以运行脚本并打开一个对话框时
ui.alert("TEXT HERE")
。
在这种情况下,得到以下结果。
- 所有者安装
onOpen_sample()
为 OnOpen 的触发器。Session.getActiveUser().getEmail()
返回所有者的电子邮件。Session.getEffectiveUser().getEmail()
返回所有者的电子邮件。
- User1
onOpen_sample()
作为 OnOpen 的触发器安装。Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回 user1 的电子邮件。
这里,
- User2 不会
onOpen_sample()
作为 OnOpen 的触发器安装。Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回 user1 的电子邮件。- 这不是所有者的电子邮件。
此外,
- User2
onOpen_sample()
作为 OnOpen 的触发器安装。Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回所有者的电子邮件。- 这不是 user2 的电子邮件。
而且,当我多次安装 OnOpen 的触发器时,即使 user1 和 user2 安装了触发器,Session.getEffectiveUser().getEmail()
也只能返回所有者的电子邮件。
通过这些,所有用户都可以运行脚本并打开对话框。我以为你的问题可能是这样的。我认为这可能是一个错误。所以我想将此报告给问题跟踪器。
从这种情况来看,在现阶段,发现了以下结果。
- 只有所有者可以运行脚本并打开对话框。
- 特定用户无法运行脚本并打开对话框。
很抱歉您的问题没有得到解决。如果我找到了解决方法,我想在这里报告。
推荐阅读
- java - 通过 Java 在 AIX 上执行命令时出现问题
- javascript - 猜数字游戏:进行循环/警报+重置
- css - 在 React 中切换翻转卡片
- scrapy - 在虚拟机上运行python程序
- debugging - 找不到可调试的浏览器选项卡
- python-3.x - Python:如何选择仅包含特定数字的倍数?
- ios - 当前 ViewController 调用 viewWillDisappear 但不调用 viewWillAppear
- php - MPDF 创建损坏的 PDF
- ruby-on-rails - Rails 使用参数中传递的关联值创建新的活动记录
- angular - 动态计算元素的宽度?