使用 Google 电子表格脚本使用 getactiveuser 查找用户名

lookup username using getactiveuser using Google Spreadsheet script

我一直在尝试使用 activeuser 查找用户名。只有第一部分有效,最后一部分无效。我的目标是根据活动用户的用户名取消隐藏 sheet(sheetname 基于用户名)。下面是我正在使用的代码。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({name: "Test getActiveUser/getEmail", functionName:  "onTest"});
  ss.addMenu("Rep Drowndown", menuEntries);
  testGetEmail("onOpen");
}


function onTest() {
  testGetEmail("menu function");
};


function testGetEmail(callerId) {
  var userEmail = "";
  var activeUser = Session.getActiveUser();

  if (activeUser == null)
    Browser.msgBox("Session.getActiveUser() returned null", "called by " + callerId, Browser.Buttons.OK);
  else
    userEmail = activeUser.getEmail();

  if (userEmail == "")
    Browser.msgBox("Your Email returned an empty string", "called by " + callerId, Browser.Buttons.OK);
  else
    var ss = SpreadsheetApp.getActiveSpreadsheet();

  var lookup = Session.getActiveUser().getEmail();
  var range = ss.getRange('$A:$B').getValues();
  var lookupRange = [];
  for (var i = 0; i < range.length; i++)
    lookupRange.push(range[i][0]);

  var index = lookupRange.indexOf(lookup);
  if (index == -1) {
    // implicit no-op
  }
  else {
    var link = range[index][2]
    var sheet = ss.getSheetByName(link);
    sheet.showSheet();
  };
}

您需要设置一个installable trigger. This allows the script to run with authorization, whereas normally "onOpen()" is run as a Simple Trigger。由于 Simple Triggers 无法授权为用户,因此您永远不会获得电子邮件地址。

最简单的解决方案是在打开时将 testGetEmail() 设置为 运行。通过在菜单中选择 Resources > Current Project's Triggers 在 Script Editor 中执行此操作。然后点击 "No triggers set up. Click here to add one now." 最后,设置你的触发器:

  1. 从 "Run."
  2. 下的第一个下拉列表中选择您的函数名称 (testGetEmail)
  3. 在 "Events."
  4. 下的第二个下拉列表中选择 "From spreadsheet"
  5. 在第三个下拉列表中选择 "On Open"。

然后测试以确保我没有输入错误:-)