Google スプレッドシート ワークブックに既にある情報から、約 100 の Google グループのメンバーを最新の状態に保つ効率的な方法を見つけようとしています。1 つのシートには、学生の電子メールとグループの電子メールの列を含む 1700 人の学生のリストがあります。別のシートには、グループ名とグループのメールのみのリストが含まれています。私が見つけたコードに基づいて、Googleアプリのスクリプトで可能だと思われます。残念ながら、私は Apps Script の経験がなく、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);
}
}
}