如何在Google Apps脚本自定义功能中获取“活动用户”的用户属性

时间:2019-06-12 08:45:35

标签: google-apps-script google-apps google-apps-marketplace custom-function google-apps-script-addon

我已经发布了一个Google Apps Script独立电子表格插件,而在自定义函数中使用PropertiesService.getUserProperties()时遇到了一些问题。

如果用户A已安装了加载项,并在用户属性中保存了一些数据。 然后,用户A将电子表格共享给用户B。当用户B运行自定义功能时,他可以获取用户A的用户属性中保存的数据。这不是我认为用户属性可以运行的功能。用户A和B都应获取自己保存的数据。

那么共享电子表格的活动用户是什么?我不希望所有电子表格查看器都获取电子表格创建者保存的数据。我在代码或“ Cloud Platform项目” 选项中做错了什么吗?

换句话说,如何在共享电子表格中为不同的查看者保存在用户属性中的不同数据?

我试图通过自定义功能获取活动用户的电子邮件,但是它不起作用。

请注意,我无法在自定义功能中使用Session.getActiveUser,因为Google Apps脚本自定义功能不支持会话服务。它将获得无效的权限异常。

https://developers.google.com/apps-script/guides/sheets/functions#Advanced

谢谢

2 个答案:

答案 0 :(得分:0)

自定义功能无法访问PropertiesServices.userProperties()(可能是电子表格所有者例外)。

根据https://developers.google.com/apps-script/guides/sheets/functions

  

与大多数其他类型的Apps脚本不同,自定义功能从不要求用户授权访问个人数据。因此,他们只能呼叫无法访问个人数据的服务,特别是以下内容:

虽然Properties包含在列表中,但该服务没有任何注释,因为自定义功能不会要求用户授权访问个人数据,因此不应将PropertiesServices.userProperties()返回为它可能会存储用户的个人数据。

答案 1 :(得分:0)

在编写了大量代码以测试不同的场景之后,我相信它无法解决上述问题。

因此,我将使用一种解决方法来实现目标。万一有人也遇到麻烦。我将在这里写下测试结果。

如果Google帐户A与Google帐户B共享电子表格。

  1. 在自定义函数中,它们都获得A的用户属性。
  2. 从网页上通过script.run调用服务器功能,A和B都可以 获得自己的用户属性。
  3. 从时间驱动的可安装触发器中,该触发器函数将被触发两次,每个触发器函数将获得自己的用户属性。
  4. 从文档的可安装触发器(如onEdit)中,对于编辑器脚本,将被两次触发,如时间驱动触发器;但是对于独立脚本,A和B都需要安装触发器,否则只会为每个用户触发一次------如果A和B都安装了触发器,则将触发两次。很好笑,我们已经为电子表格安装了触发器,但是共享电子表格的工作方式与此不同,适用于不同的用户...

  5. 在大多数情况下,即使在某些情况下也可以获得正确的用户属性,也无法获得正确的活动用户电子邮件。会话服务总是倾向于返回电子表格的所有者。