公司域中的getActiveUser方法

时间:2014-11-05 21:14:57

标签: google-apps-script google-sheets

我正在尝试拨打Session.getActiveUser,以便在编辑其他字段时自动填充Google表格文档中的某些字段。所有用户都在同一个域中;但是,我收到一条错误消息,"You do not have permission to call getActiveUser."我在现有文档的印象下,同一域内的用户可以通过自定义脚本访问彼此的信息 - 这是不正确的?如果是这样,我知道有几种解决方法,但如果没有,是否还有其他一些我可能做错了?

提前致谢!

4 个答案:

答案 0 :(得分:1)

" user3889423"是正确的,你需要授权用户,以便调用getActiveUser()。

您可以在以下链接中找到此信息: https://developers.google.com/apps-script/guides/sheets/functions#advanced

答案 1 :(得分:0)

如果该脚本在没有用户明确授权的情况下运行,您将无法获得ActiveUser(我认为)。当用户首先授权脚本时,它应该工作。

答案 2 :(得分:0)

The link in KRR's answer contains the information you need。这是摘录回答你的问题:

  • 即使对于同一域内的用户,您也绝对无法在未经用户授权的情况下致电Session.getActiveUser()
  

如果您的自定义函数抛出错误消息You do not have permission to call X service.,则该服务需要用户授权,因此无法在自定义函数中使用。

  • 但是,即使有用户授权,您仍然无法在自定义函数中使用Session.getActiveUser()(直接在单元格中)。您需要创建自定义菜单:
  

要使用上述服务以外的服务,请创建一个运行Apps Script功能的自定义菜单,而不是编写自定义功能。从菜单触发的功能将在必要时要求用户进行授权,因此可以使用所有Apps脚本服务。

答案 3 :(得分:-1)

我对Google Apps脚本和Java相当陌生,但设法实现了上面讨论的内容。下面的代码将使用当前用户的用户名填充活动工作表的单元格A1。

我真正想要做的是,打开单元格A1,而无需用户单击自定义菜单。有没有人对如何实现这一点有任何想法?

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('Get Username', 'getuser')
      .addToUi();      
}

function getuser()

{
var gotuser = Session.getActiveUser().getEmail();
  //run the line below to output to stackdriver logging
  console.log(gotuser);
  //SpreadsheetApp.getUi().alert(gotuser);
  SpreadsheetApp.getActiveSpreadsheet().getRange('A1').activate().setValue(gotuser);
 }