从群组电子邮件(群组中的群组)应用程序脚本中提取群组电子邮件,然后是电子邮件
Extract group emails from group emails (groups in groups) apps script and then emails
我正在编写一个脚本,其中包括从一个组中获取成员,
该脚本确定邮件是群组电子邮件还是成员电子邮件,
但是,在我的工作中,我们有多个小组!
这是脚本
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');
}
这行得通,作为第二列中的组,但我需要它们自动扩展,就像我在开始时对循环所做的那样,但我不确定它是如何工作的,我尝试了循环中的循环,但是当我得到小组成员时,案例中只写了一个而不是全部。
如果您需要更多信息,或者需要我解释您不确定是否理解的要点,请告诉我
我稍微修改了你的代码。你提到的关于在循环内做循环的事情是正确的。
我做了类似的事情,但不是在循环中有循环,而是创建了一个新函数,然后递归调用它。这是为了处理一个组有另一个组,而另一个组有另一个组作为成员的情况。
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;
}
我希望这对您打算做的事情有所帮助。
我正在编写一个脚本,其中包括从一个组中获取成员, 该脚本确定邮件是群组电子邮件还是成员电子邮件, 但是,在我的工作中,我们有多个小组!
这是脚本
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');
}
这行得通,作为第二列中的组,但我需要它们自动扩展,就像我在开始时对循环所做的那样,但我不确定它是如何工作的,我尝试了循环中的循环,但是当我得到小组成员时,案例中只写了一个而不是全部。
如果您需要更多信息,或者需要我解释您不确定是否理解的要点,请告诉我
我稍微修改了你的代码。你提到的关于在循环内做循环的事情是正确的。
我做了类似的事情,但不是在循环中有循环,而是创建了一个新函数,然后递归调用它。这是为了处理一个组有另一个组,而另一个组有另一个组作为成员的情况。
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;
}
我希望这对您打算做的事情有所帮助。