【问题标题】:Extract group emails from group emails (groups in groups) apps script and then emails从组电子邮件(组中的组)应用程序脚本中提取组电子邮件,然后是电子邮件
【发布时间】:2015-10-01 09:26:17
【问题描述】:

我正在编写一个脚本,其中包括从组中获取成员, 该脚本识别邮件是组电子邮件还是成员电子邮件, 但是,在我的工作中,我们分组分组!

这是脚本

function getGroupUsers() {
var group = sheet.getActiveRange().getValue();
var members = AdminDirectory.Members.list(group).members;
for (var i = 1; i < members.length; i++) {
  var member = members[i];
  var caseUser = sheet.getRange(i+1, 1);
  var caseGroupe = sheet.getRange(i+1, 2);   

  var lastRange = sheet.getRange(sheet.getLastRow(), 3);
//  var caseGroupe2 = sheet.getRange(i+1, 4);

switch (member.type) {
    case 'USER':
      Logger.log('%s is a user', member.email);
      caseUser.setValue(member.email);
      break;
    case 'GROUP':
      Logger.log('%s is a group', member.email);
      //var group = GroupsApp.getGroupByEmail(member.email);
      caseGroupe.setValue(member.email);
      break;
    default:
      Logger.log('nothing');
  }

这是可行的,作为第二列中的组,但我需要它们自动扩展,就像我在开始时对循环所做的那样,但我不确定它如何工作,我尝试了循环在循环中,但是当我得到该组的成员时,只有一个写在案例中而不是全部。

如果您需要更多信息,或者您需要我解释您不确定理解的一点,请告诉我

【问题讨论】:

    标签: google-apps-script google-sheets admin google-groups


    【解决方案1】:

    我稍微修改了您的代码。您提到的关于在循环中执行循环的事情是正确的。

    我做了类似的事情,但我没有在循环中创建一个循环,而是创建了一个新函数,然后递归调用它。这是为了处理一个组有另一个组,而另一个组有另一个组作为成员的情况。

    function getGroup(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var cell = sheet.getActiveCell();
      var group = sheet.getActiveCell().getValue();  
      var subgroup = 1;
      getMembers(group, subgroup, cell, sheet);  
      cell.activate();  
    }
    
    
    function getMembers(group, subgroup, cell, sheet)
    {
      var col =  cell.getColumn() +subgroup;
      var row =  cell.getRow() +1;
      try{  
        var members = AdminDirectory.Members.list(group).members;
        if(!members)
        {
          return 0; 
        }
      }
      catch (e)
      {
        return;
      }
      var offset = 0;
      for(var member in members){
        var newcell = sheet.getRange(row++,col);
        newcell.setValue(members[member].email);    
        if(members[member].type == 'GROUP'){
          newcell.activate();
          offset = getMembers(members[member].email,subgroup , sheet.getActiveCell() ,sheet);
          row = row + offset;
        }
      }
      return  member.length + offset;
    }
    

    我希望这对您打算做的事情有所帮助。

    【讨论】:

    • 非常感谢,这有效!但它并没有发展整个小组,我得到了 TypeError: Can not read the property "length" from undefined about this line : 'return member.length + offset;'但想法就在这里,就像我认为的那样有效!
    • 我编辑了代码。我没有针对没有成员的群组进行测试。
    • 就是这种情况,当组有0个成员时它会停止,我已经尝试了一些if和其他条件但没关系
    • 即使我发布了已编辑的代码,您是否仍然收到错误消息?
    • 我的错!那行得通!所有组的所有用户现在都在工作表上,谢谢!没有更多的错误,现在我正在尝试找到一种方法来在同一列中显示所有组的成员,以使工作表更“可读”,如果您有想法,欢迎您:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 2015-01-16
    • 1970-01-01
    • 2022-10-25
    • 2014-02-14
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多