我正在尝试找到一种简化的方法,以使大约 100 个 Google 群组中的成员从 Google 表格工作簿中已有的信息中获得最新信息。一张表有一个包含 1700 名学生的列表,其中包含学生电子邮件和小组电子邮件的列。另一张表仅包含群组名称和群组电子邮件的列表。根据我发现的代码,谷歌应用脚本似乎是可行的。不幸的是,我以前没有使用 Apps 脚本的经验,也没有使用 javascript 的经验。我一直在尝试拼凑一个可能看起来像这样的过程。
- 删除组的所有当前成员。
- 上传正确的成员。
- 冲洗并重复。
不是最优雅的,但它似乎可行。
这就是我到目前为止所做的,我碰壁了。
我发现这 2 个功能的组合将从 1 个组中删除所有成员:
//Function to Remove 1 group member from 1 group
function removeGroupMember(groupEmail, userEmail) {
Logger.log(userEmail)
userEmail = userEmail.trim();
AdminDirectory.Members.remove(groupEmail, userEmail);
}
//Remove all Members from 1 group
function removeAllMembers() {
var groupEmail = 'groupemail@mydomain.org';
var members = AdminDirectory.Members.list(groupEmail).members;
for (var m in members) {
var member = members[m];
var email = member.email;
removeGroupMember(groupEmail, email)
}
}
我想我可以嵌套另一个循环来将它与从工作表中获取组电子邮件的代码配对。
//get all of the groups from the spreadsheet
function getGroupsFromSpreadsheet(){
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName('google_groups');
const data = sheet.getRange(2,2,100).getValues();
return data;
logger.log(data)
}
这是我经过几次试验和错误后得出的结论。它从脚本编辑器运行,执行日志显示它是成功的,但是在 Google Admin 中实际上没有发生任何事情——它们都还在组中。
function removeAllMembers() {
var groups = [getGroupsFromSpreadsheet()];
var groupEmail = [getGroupsFromSpreadsheet()];
var members = AdminDirectory.Members.list(groupEmail).members;
for (var element in groups) {
for (var m in members) {
var member = members[m];
var email = member.email;
removeGroupMember(groupEmail, email);
}
}
}