質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

1672閲覧

Google グループメールの全メンバー一覧取得実行エラーの解決

mario33

総合スコア0

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/11/11 06:45

前提・実現したいこと

管理者権限付与済みのアカウントで実行
APIを有効化済み

エラーを解決し、全グループの全メンバーアドレス取得を行いたいです。

発生している問題・エラーメッセージ

TypeError: Cannot read property 'length' of undefined

該当のソースコード

// 全グループの、全メンバーアドレス取得 // スプレッドシートを開いた際に、メニューに「スクリプト実行」を追加する function onOpen() { SpreadsheetApp.getUi() .createMenu("スクリプト実行") .addItem("メンバーアドレス一覧取得", "confirmLoadGroupMembersAddress") .addToUi(); } // 確認を表示してOKなら一覧読み込み function confirmLoadGroupMembersAddress() { // ドメイン一覧を取得 const domains = getDomains(); // 開始確認 const ui = SpreadsheetApp.getUi(); // 読み込み処理 var res = ui.alert( "確認", "このシートを消去して全グループの情報を読み込みます。\nよろしいですか?", ui.ButtonSet.OK_CANCEL); if (res == "OK") { loadGroupMembersAddress(domains); ui.alert( "終了", "完了しました。OKを押すと表示されます。", ui.ButtonSet.OK); } else { ui.alert( "キャンセル", "キャンセルしました", ui.ButtonSet.OK); } } // 対象とするドメイン一覧を取得 function getDomains() { // 現在ログインしているユーザー情報を元に、全ドメイン一覧を取得 var mail = Session.getActiveUser().getEmail(); var user = AdminDirectory.Users.get(mail); var domains = AdminDirectory.Domains.list(user.customerId).domains; // ドメイン名のリストを作成して返す var list = []; for (var i = 0; i < domains.length; i++) { var domain = domains[i]; list.push(domain.domainName); } return list; } // 全グループについて取得してシートに出力 function loadGroupMembersAddress(domains) { // ヘッダーの定義 const header = ["GroupAddress", "Name", "DirectMembersCount", "UserAddress"]; // 追加される行を保持する配列 var rows = []; // ヘッダ行を出力 rows.push(header); // ドメインごとにループ for (var i = 0; i < domains.length; i++) { var domain = domains[i]; // 取得数制限にかかる際のページング var groupNextPageToken = null; // グループごとのループ do { var grouplist = AdminDirectory.Groups.list({ domain: domain, nextPageToken: groupNextPageToken }); // グループが存在しなければ終了 if (!grouplist.groups) break; // 次ページがあるときはトークンが入る groupNextPageToken = grouplist.nextPageToken; // 各グループについての処理 for(var j = 0; j < grouplist.groups.length; j++){ var group = grouplist.groups[j]; var memberNextPageToken = null; // グループに所属するメンバーの取得 do { var memberlist = AdminDirectory.Members.list(group.email, { pageToken: memberNextPageToken }); // 次ページがあるときはトークンが入る memberNextPageToken = memberlist.nextPageToken; // 今回(このページ)で取得できた分を一覧に追加 for (var k = 0; k < memberlist.members.length; k++){ var member = memberlist.members[k]; var cols = []; cols.push(group.email); cols.push(group.name); cols.push(group.directMembersCount); cols.push(member.email); rows.push(cols); } } while (memberNextPageToken); } } while (groupNextPageToken); } // 以降、スプレッドシートへの出力 // アクティブなシート取得 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 左上セルを基準に、最終行まで削除(書式は残す) sheet.getRange(1, 1, sheet.getMaxRows(), header.length).clearContent(); // 書き込み sheet.getRange(1, 1, rows.length , header.length).setValues(rows); }

補足情報(FW/ツールのバージョンなど)

https://qiita.com/kirurobo/items/9b2f99bc12672e30b5ce
↑を、まるっと参考にしてます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sawa

2021/11/12 00:32

質問内容的に Google Apps Script のタグを付けましょう。 ちなみに 参考にされたサイト通りシートに追加されたメニューから実行しましたか?
guest

回答1

0

補足情報欄の記事を書いた者です。
メンバーが一人もいないグループがあった場合エラーとなってしまうようでしたので、記事内のスクリプトを修正しました。

投稿2022/06/22 00:54

Kirurobo

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問