弹出仅对文档所有者显示
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")
。
在这种情况下,得到以下结果。
- 所有者安装
onOpen_sample()
作为 OnOpen 的触发器。
Session.getActiveUser().getEmail()
returns 所有者的电子邮件。
Session.getEffectiveUser().getEmail()
returns 所有者的电子邮件。
- User1 安装
onOpen_sample()
作为 OnOpen 的触发器。
Session.getActiveUser().getEmail()
return没有价值。
Session.getEffectiveUser().getEmail()
returns user1 的邮箱。
这里,
- User2 没有安装
onOpen_sample()
作为 OnOpen 的触发器。
Session.getActiveUser().getEmail()
return没有价值。
Session.getEffectiveUser().getEmail()
returns 用户 1 的电子邮件。
- 这不是所有者的电子邮件。
此外,
- User2 安装
onOpen_sample()
作为 OnOpen 的触发器。
Session.getActiveUser().getEmail()
return没有价值。
Session.getEffectiveUser().getEmail()
returns 所有者的电子邮件。
- 这不是 user2 的邮箱。
而且,当我多次安装 OnOpen 的触发器时,即使 user1 和 user2 安装了触发器,Session.getEffectiveUser().getEmail()
只得到 return 所有者的电子邮件。
通过这些,所有用户都可以运行脚本并打开对话框。我以为你的问题可能是这个。我认为这可能是一个错误。所以我想将此报告给问题跟踪器。
从这种情况来看,在现阶段,发现如下结果。
- 只有所有者可以运行脚本和打开对话框。
- 特定用户无法 运行 脚本和打开对话框。
很抱歉您的问题没有得到解决。如果我找到解决方法,我想在这里报告。
我有以下脚本,用于在打开文档时弹出一个简单的窗口。有什么方法可以让这个弹出窗口只显示给 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")
。
在这种情况下,得到以下结果。
- 所有者安装
onOpen_sample()
作为 OnOpen 的触发器。Session.getActiveUser().getEmail()
returns 所有者的电子邮件。Session.getEffectiveUser().getEmail()
returns 所有者的电子邮件。
- User1 安装
onOpen_sample()
作为 OnOpen 的触发器。Session.getActiveUser().getEmail()
return没有价值。Session.getEffectiveUser().getEmail()
returns user1 的邮箱。
这里,
- User2 没有安装
onOpen_sample()
作为 OnOpen 的触发器。Session.getActiveUser().getEmail()
return没有价值。Session.getEffectiveUser().getEmail()
returns 用户 1 的电子邮件。- 这不是所有者的电子邮件。
此外,
- User2 安装
onOpen_sample()
作为 OnOpen 的触发器。Session.getActiveUser().getEmail()
return没有价值。Session.getEffectiveUser().getEmail()
returns 所有者的电子邮件。- 这不是 user2 的邮箱。
而且,当我多次安装 OnOpen 的触发器时,即使 user1 和 user2 安装了触发器,Session.getEffectiveUser().getEmail()
只得到 return 所有者的电子邮件。
通过这些,所有用户都可以运行脚本并打开对话框。我以为你的问题可能是这个。我认为这可能是一个错误。所以我想将此报告给问题跟踪器。
从这种情况来看,在现阶段,发现如下结果。
- 只有所有者可以运行脚本和打开对话框。
- 特定用户无法 运行 脚本和打开对话框。
很抱歉您的问题没有得到解决。如果我找到解决方法,我想在这里报告。