ユーザー入力と年齢に基づいて自動的に更新される 6 列の電子メール アドレスを含むスプレッドシートがあります。各列は個別の Google グループに対応しています。
スプレッドシートの各列の動的な値に基づいて、Google グループのメンバーシップを自動入力したいと考えています。たとえば、編集時または毎日のタイマーのいずれかで、Google Script は列 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 つの問題です。そのエラーを乗り越えたら、グループ メンバーシップをスプレッドシート リストと比較する方法、および/またはすべてを削除してすべてを再インポートする方法を学ぶ必要があります。
これらの 2 つの問題に関するヘルプは大歓迎です!
編集1(GAS APIを使用してGoogleグループのメンバーシップを更新できないというMogsdadの確認後)
さて、私にとってプラン B はハックアラウンドではありません。代わりに、プラン B は、スプレッドシートのユーザー リストを Google グループのユーザー リストと比較し、Google グループのユーザー リストに手動で追加/削除する必要があるユーザーを通知するスクリプトを作成することです。リンク先の投稿で提供されたコードを調整しました。
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"
};
手動で追加するメンバー (つまり、シート リストにあるがグループ リストにないメンバー) と手動で削除するメンバー (つまり、グループ リストにあるがグループ リストにないメンバー) を通知する出力を作成することは可能ですか?シート リスト)?
さらに、同じスクリプトで 6 つの異なるグループに対して同じことを行うことはできますか? (私のシートでは、グループの電子メールアドレスは行1にあり、メンバーの電子メールアドレスはその直下にあり、6列すべてにあります)可能であれば、ユーザーを手動で追加する必要があるグループを出力で指定したいと思いますまたはから削除されます。
ご協力いただきありがとうございます!