首页 > 解决方案 > Google Script/Sheet 不确定如何从用户个人资料中提取员工信息部分的信息,例如员工 ID 和职位

问题描述

我有一个脚本,可以用所需的信息填充工作表,但我不确定如何从用户配置文件的“员工信息”部分检索数据。我想要以下 4 件物品,我缺少什么?我还查看了Admin SDK Directory API,但在添加 externalIds[] 时没有运气,如果可以,请帮助指出正确的方向

  1. 员工ID
  2. 职称
  3. 员工类型
  4. 部门

function listAllUsers() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Users');
  sheet.getRange(1, 8).setValue(Utilities.formatDate(new Date(), "GMT", "HH:mm dd/MM/yyyy"));
 
  var pageToken;
  var page;
  n = 0;
  do {
    page = AdminDirectory.Users.list({
      domain: 'domain.co.uk',
      orderBy: 'givenName',
      maxResults: 100,
      pageToken: pageToken
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i++) {
        var user = users[i];
        sheet.getRange(n + i + 2, 1).setValue(user.name.fullName);      
        sheet.getRange(n + i + 2, 2).setValue(user.name.givenName); 
        sheet.getRange(n + i + 2, 3).setValue(user.name.familyName); 
        sheet.getRange(n + i + 2, 4).setValue(user.primaryEmail);  
        sheet.getRange(n + i + 2, 5).setValue(user.orgUnitPath);
        SpreadsheetApp.flush();
      }
    } else {
      Logger.log('No users found.');
    }
    n+=100;
    pageToken = page.nextPageToken;
  } while (pageToken);
   
}

标签: google-apps-scriptgoogle-sheets

解决方案


我假设您需要以下数据:

在此处输入图像描述 在此处输入图像描述

externalIds和都是organizations数组。它们允许同一个人的多组数据。

假设您的数据库中每个人只有一组,您可以尝试:

user.externalIds[0].value

user.organizations[0].title

user.organizations[0].type

user.organizations[0].department

PS:我没有使用过这个 API,这些建议是基于我对文档的阅读。让我知道它是否有效。祝你好运。


PPS:我还建议一次性将所有数据发送到工作表,以尽量减少对工作表的调用

sheet.getRange(n + i + 2, 1, 1, 5).setValues([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, user.orgUnitPath]);  

将所有用户数据放在一个数组中并一次性发布到工作表可能会更有效。

您还可以避免调用SpreadsheetApp.flush()每个用户。最好在发布数据结束时执行一次。


编辑

为避免因丢失而失败externalId,您可以尝试:

  if (user.externalIds) {
    var extID = user.externalIds[0].value;
  } else {
    extID = null;
  }

然后发布extId到工作表。


推荐阅读