我有以下脚本,用于在打开文档时简单弹出。有什么办法可以使此弹出窗口仅显示给工作表所有者,而不是与文档共享的所有其他人?
function onOpen() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var Alert = ui.alert("TEXT HERE");
}
我的用例是作为我的文档所有者仅对我可见的一条消息,我不希望其他拥有共享权限的人(例如客户)看到。
答案 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");
}
}
Session.getActiveUser().getEmail()
的值。所以我认为可以使用。当时,Session.getActiveUser().getEmail()
拥有所有者的电子邮件。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
如果所有用户都安装了触发器,则Session.getEffectiveUser().getEmail()
返回该值。因此,需要将该值与注册用户的值进行比较。在此示例脚本中,它假定如下。
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");
}
当我刚刚由3个用户测试这种情况时,我注意到了新问题。
首先,它假定如下。
onOpen_sample(){}
。ui.alert("TEXT HERE")
。在这种情况下,可获得以下结果。
onOpen_sample()
作为OnOpen的触发器。
Session.getActiveUser().getEmail()
返回所有者的电子邮件。Session.getEffectiveUser().getEmail()
返回所有者的电子邮件。onOpen_sample()
作为OnOpen的触发器。
Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回用户1的电子邮件。在这里
onOpen_sample()
作为OnOpen的触发器。
Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回user1的电子邮件。
此外,
onOpen_sample()
作为OnOpen的触发器。
Session.getActiveUser().getEmail()
不返回任何值。Session.getEffectiveUser().getEmail()
返回所有者的电子邮件。
而且,当我多次安装OnOpen触发器时,即使user1和user2安装了触发器,Session.getEffectiveUser().getEmail()
也只能返回所有者的电子邮件。
通过这些,所有用户都可以运行脚本并打开对话框。我以为您的问题可能就是这个。我认为这可能是一个错误。因此,我想将此报告给问题跟踪器。
从这种情况下,在当前阶段,发现以下结果。
很抱歉您的问题尚未解决。如果找到解决方法,我想在这里报告。