1

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

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

理想情况下,脚本会调用当前的 Google 群组成员资格,将其与 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 个问题。一旦我克服了这个错误,我需要学习如何将组成员身份与电子表格列表进行比较和/或删除所有内容并重新导入所有内容。

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


编辑 1(在 Mogsdad 确认我不能使用 GAS API 更新 Google Group 成员资格后)

好的,所以 B 计划对我来说不是一个乱七八糟的方法,因为我太新手了,去那里感觉不舒服。计划 B 是编写一个脚本,将电子表格用户列表与 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 列)如果可能,那么我希望输出指定用户必须手动添加到哪个组或从中删除。

谢谢你的帮助!

4

1 回答 1

1

您应该能够调整如何使用电子表格向 Google 网站添加权限?,分别替换Site.getViewers,Site.addViewer()Site.removeViewer(),并适当调整其他细节。DomainGroup.getAllMembers()DomainGroup.addMember()DomainGroup.removeMember()

WRT 你的错误...确保你没有混淆组类型。请参阅域组与 Google 组

于 2014-01-10T20:48:10.607 回答