我有一个包含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列)如果可能,那么我希望输出指定必须手动添加用户的组或从中删除。
感谢您的帮助!
答案 0 :(得分:1)
您应该能够调整How to add permission to Google site using spreadsheet?中的代码,将Site.getViewers
,Site.addViewer()
和Site.removeViewer()
替换为DomainGroup.getAllMembers()
,DomainGroup.addMember()
和{分别{3}},并适当调整其他细节。
WRT您的错误...确保您没有混淆组类型。请参阅DomainGroup.removeMember()
。