自动更新Google电子表格中每个动态电子邮件地址列表的Google Group成员资格

时间:2014-01-10 19:13:53

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

我有一个包含6列电子邮件地址的电子表格,可根据用户输入和年龄自动更新。每列对应一个不同的Google群组。

我想根据每个电子表格列中的动态值自动填充Google网上论坛成员资格。例如 - 无论是在编辑还是在每日计时器上 - Google脚本都会读取A列中的电子邮件地址列表并更新相应的Google群组。

理想情况下,该脚本会调用当前的Google Group成员身份,将其与A列中的电子邮件地址列表进行比较,从群组中删除不再出现在A列中的任何地址,并将任何显示的地址添加到群组在A列中,但目前不在该组中。

这可能要求太多。因此,我可以想象脚本会删除组中的所有成员,然后将A列中的所有电子邮件地址添加到组中。虽然这可以实现同样的目标(据我所知),但我想知道是否会有一些历史遗失或类似的副作用,以便例行地清除所有成员。因此,我更喜欢首先描述的比较方法。

在论坛上,我可以通过Serge insas的回复找到这个讨论: Add emailadress to Spreadsheet, auto add the email to a Google group

当我在脚本编辑器中运行此代码时,将“testgroup@domain.com”替换为我的Google网上论坛的电子邮件地址,我收到以下错误:

  

服务错误::无效的请求URI

引用第10行,即

var group = GroupsManager.getGroup('testgroup@domain.com');

通过该错误是一个问题。一旦我越过该错误,我需要学习如何将组成员资格与电子表格列表进行比较和/或删除所有并重新导入所有错误。

非常感谢对这两个问题的任何帮助!


修改1 (在Mogsdad确认我无法使用GAS API更新Google群组成员资格之后)

好吧,所以B计划对我来说不是一个黑客,因为我太新手了,不能去那儿舒服。而计划B则编写一个脚本,将电子表格用户列表与Google Group用户列表进行比较,并告诉我需要手动添加到Google Group用户列表中/从Google Group用户列表中删除哪些用户。我已经调整了您在链接我的帖子中提供的代码。

    function compareGroupMembers() {  
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Groups');
      var rows = sheet.getDataRange();
      var values = rows.getValues();
      var sheetUsers = [];
    Logger.log(values)

    // Get user list from sheet
      for (var i = 1; i < values.length; i++) {
        var row = values[i];
        sheetUsers.push(row[0]); // build array of users
      }
      Logger.log(sheetUsers)

    // Get user list from group
      var group = GroupsApp.getGroupByEmail("mygroup@googlegroups.com");
      var groupUsers = group.getUsers().join(',').split(',');
      Logger.log(groupUsers)

    // Compare user lists and define users to Add and Remove
    //*****This is where I need direction. This code is just a placeholder.*****
      var usersToAdd = sheetUsers.uniqueFrom(groupUsers);
      var usersToRemove = groupUsers.uniqueFrom(sheetUsers);
      var addErrors = 0; // Counter for exceptions

    //Then I would like usersToAdd and usersToRemove to be listed in a separate sheet
    //Because I have six groups, I'm hoping the new sheet can be organized by
    //Col A is Google Group email
    //Col B is user email
    //Col C is "add" or "delete"

    };

是否可以创建一个输出,告诉我哪些成员要手动添加(即列表上但不在组列表中的那些成员)和手动删除的成员(即那些在组列表中但是不在表单上)?

此外,我可以为六个不同的组使用相同的脚本执行相同的操作吗? (在我的工作表中,组电子邮件地址在第1行,成员电子邮件地址直接在其下,对于所有6列)如果可能,那么我希望输出指定必须手动添加用户的组或从中删除。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您应该能够调整How to add permission to Google site using spreadsheet?中的代码,将Site.getViewersSite.addViewer()Site.removeViewer()替换为DomainGroup.getAllMembers()DomainGroup.addMember()和{分别{3}},并适当调整其他细节。

WRT您的错误...确保您没有混淆组类型。请参阅DomainGroup.removeMember()