1

ユーザー入力と年齢に基づいて自動的に更新される 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列すべてにあります)可能であれば、ユーザーを手動で追加する必要があるグループを出力で指定したいと思いますまたはから削除されます。

ご協力いただきありがとうございます!

4

1 に答える 1

1

スプレッドシートを使用して Google サイトにアクセス許可を追加する方法のコードを適応させることができるはずです。、およびをおよび にそれぞれ置き換えSite.getViewers、その他の詳細を適切に調整します。Site.addViewer()Site.removeViewer()DomainGroup.getAllMembers()DomainGroup.addMember()DomainGroup.removeMember()

エラーを WRT してください...グループの種類を混同していないことを確認してください。ドメイン グループと Google グループの比較をご覧ください。

于 2014-01-10T20:48:10.607 に答える