2015年8月24日月曜日

Google Apps ScriptでGoogleグループ一覧をスプレッドシートに作る



AdminSDK使うやり方。
スプレッドシートを作って、シートの名前にドメイン名をセットすると、そのドメイン名のGoogleグループ一覧とメンバー一覧、マネージャー一覧を表示します。
(自前のGoogleAppsにセットされているドメインだけね)

---


function GetGroupAddress(){
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();

  //スプレッドシートのシート枚数カウント
 var sh_cnt = spreadSheet.getNumSheets();

  //sh_cnt = 1;  //デバッグ用
  for (var sheetNum=0; sheetNum<sh_cnt; sheetNum++){
  var k = 2; //行数カウント
 
  SpreadsheetApp.setActiveSheet(spreadSheet.getSheets()[sheetNum]);
  var sheet = spreadSheet.getActiveSheet();

  sheet.clear();
  var myDomain = sheet.getName();
 
  sheet.getRange(1,1).setValue("グループアドレス");
  sheet.getRange(1,2).setValue("管理者");

  var pageToken, page;
  do {
    page = AdminDirectory.Groups.list({
      domain: myDomain,
      maxResults: 900,
      pageToken: pageToken
    });
    var groups = page.groups;
    if (groups) {
      for (var i = 0; i < groups.length; i++) {
        var managerNames ="";
        var group = groups[i];
     
          var members = AdminDirectory.Members.list(group.email).members;
          if (members){
            var memberList="";
            for (var l = 0;l < members.length;l++){
              var member = members[l];
              if (sheet.getRange(k,2) + sheet.getRange(k,3) == group.email + member.email){
              }else{
                if (member.role == "MANAGER") {
                  managerNames = managerNames + member.email + ", ";
                }
                memberList = memberList + member.email;
                if(l == members.length -1){
                }else{
                  memberList = memberList + ", ";
                }
              }
            }
            sheet.getRange(k,1).setValue(group.email);
            sheet.getRange(k,3).setValue(memberList);
            sheet.getRange(k,2).setValue(managerNames);
            k ++;
          } else {
            sheet.getRange(k,1).setValue(group.email);
            k++;
          }
      }
    } else {
      Logger.log('グループがありません');
    }
    pageToken = page.nextPageToken;
  } while (pageToken);

  var d = new Date();
  sheet.getRange(1,3).setValue("更新日時: " + Utilities.formatDate( d, 'JST', 'yyyy/MM/dd HH:mm:ss'));

  //整形
  sheet.getRange("A:A").setBackground("#e2ffdc");
  sheet.getRange("B1:C1").setBackground("#d2d2ff");
  sheet.setColumnWidth(1, 200);
  sheet.setColumnWidth(2, 150);
  sheet.setColumnWidth(3, 700);
  sheet.getRange("B:C").setWrap(true);
  sheet.getRange("A:A").setVerticalAlignment("middle");
  }
}


0 件のコメント:

コメントを投稿