Получение групп Google для списка пользователей

У меня есть таблица Google с двумя листами (ввод и вывод).
Лист ввода содержит список адресов электронной почты пользователей в столбце A (где A1 является заголовком).

Я хочу перебрать список пользователей и получить список групп Google, в которых состоит каждый пользователь, а затем вывести эти данные на выходной лист. Столбец A является их адресом электронной почты, а столбец B, C, D и т. д. содержит их группы.

Итак, что-то вроде:

╔═══════════════════╦════════════════════╦════════════════════╦════════════════════╦════════════════════╗
║       User        ║    User Groups     ║                    ║                    ║                    ║
╠═══════════════════╬════════════════════╬════════════════════╬════════════════════╬════════════════════╣
║ [email protected][email protected][email protected][email protected][email protected] ║
║ [email protected][email protected][email protected] ║                    ║                    ║
║ [email protected][email protected][email protected][email protected] ║                    ║
╚═══════════════════╩════════════════════╩════════════════════╩════════════════════╩════════════════════╝

Пока это то, что у меня есть:

function getUserGrps(){
  var ssID = "spreadsheetID"
  var ss = SpreadsheetApp.getActiveSpreadsheet() || SpreadsheetApp.openById(ssID)
  var inputSheet = ss.getSheetByName("Input")
  var outputSheet = ss.getSheetByName("Output")
  var groups = []
  
  var userList = inputSheet.getDataRange().offset(1, 0).getValues()
  userList.pop()
  
  userList.forEach(function(user){
    var response = AdminDirectory.Groups.list({userKey: user})
    var userGroups = response.groups
    userGroups.forEach(function(group){
      Logger.log(group.name)
    })
  })
}

Я пробовал следующее:

userList.forEach(function(user){
    var response = AdminDirectory.Groups.list({userKey: user})
    var userGroups = response.groups
    userGroups.forEach(function(group){
      groups.push(group.name)
    })
  })

А затем сбрасывает этот вывод, но с ним есть несколько проблем. Во-первых, он просто выгружается в столбец A (в виде списка). Во-вторых, я изо всех сил пытаюсь найти способ объединить/добавить адрес электронной почты пользователя в список групп.

По сути, у меня полный мозговой пердеж, и любое руководство будет высоко оценено.




Ответы (1)


Есть много способов добавить что-то в начало массива. Я думаю, что то, что вы пытаетесь сделать, поддается созданию нового массива с использованием map() и массив объединение (я использовал синтаксис распространения).

function getUserGrps(){
  const ssID = "spreadsheetID";
  const ss = SpreadsheetApp.getActiveSpreadsheet() || SpreadsheetApp.openById(ssID);
  const inputSheet = ss.getSheetByName("Input");
  const outputSheet = ss.getSheetByName("Output");
  let groups = [];
  
  const userList = inputSheet.getDataRange().offset(1, 0).getValues();
  userList.pop();
  
  let maxGroups = 0;
  userList.forEach(function(user) {
    const userEmail = user[0];
    const response = AdminDirectory.Groups.list({userKey: userEmail});
    const userGroups = response.groups ? response.groups.map(group => group.email) : [];
    groups.push([userEmail, ...userGroups]);
    
    // Set the maximum number of groups
    if (userGroups.length > maxGroups)
      maxGroups = userGroups.length;
  });
  
  // When printing a table with setValues(), every row needs to have the same length
  const numColumns = maxGroups + 1;
  const table = groups.map(function(row) {
    if (row.length < numColumns) {
      return [...row, ...new Array(numColumns - row.length)];
    }
    return row;
  });
  
  outputSheet.getRange(1, 1, table.length, table[0].length).setValues(table);
}

Рекомендуемое чтение:

person Diego    schedule 30.11.2020
comment
Спасибо, Диего, это краткий ответ с полезным материалом. Буду перечитывать! - person SL8t7; 01.12.2020
comment
Что бы я хотел сделать, если бы хотел продвигать результаты только после того, как группа была найдена? Я полагаю, что это значительно ускорит процесс, поскольку у многих пользователей не будет группы. - person SL8t7; 01.12.2020