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

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

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

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2331閲覧

TypeError: Cannot read properties of undefined (reading 'length')

narururu

総合スコア172

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2024/01/17 08:13

編集2024/01/17 09:22

実現したいこと

●実現したいこと
下記エラーを解決したいです!

TypeError: Cannot read properties of undefined (reading 'length')

発生している問題・分からないこと

下記エラーが表示されてしまい、原因がわからず困っております。

TypeError: Cannot read properties of undefined (reading 'length')

エラーメッセージ

TypeError: Cannot read properties of undefined (reading 'length')

該当のソースコード

const act_sheet = SpreadsheetApp.getActive().getActiveSheet(); let drv_list, drv_info, drv_token; let prm_list, prm_info, role_ja; let array = []; function myFunction() { array.push(["共有ドライブ", "メンバー", "メール", "タイプ", "役割"]); // Drive APIから共有ドライブのリストを取得、pageTokenがある限り繰り返し do { drv_list = Drive.Drives.list({ maxResults: 300, pageToken: drv_token, useDomainAdminAccess: true }); for (let i = 0; i < drv_list.items.length ; i++) { drv_info = drv_list.items[i]; try { // 共有ドライブごとにパーミッション情報を取得 prm_list = Drive.Permissions.list( drv_info.id, {supportsAllDrives: true, useDomainAdminAccess: true} ); for (let j = 0; j < prm_list.items.length; j++) { prm_info = prm_list.items[j]; // ロール情報を日本語化 switch (prm_info.role) { case ("organizer"): role_ja = "管理者"; break; case ("fileOrganizer"): role_ja = "コンテンツ管理者"; break; case ("reader"): role_ja = "閲覧者"; break; case ("commenter"): role_ja = "閲覧者(コメント可)"; break; case ("writer"): role_ja = "投稿者"; break; default: role_ja = prm_info.role; } // 取得した共有ドライブ名および各種情報を配列に追加 if (j === 0) { array.push([ drv_info.name, prm_info.name, prm_info.emailAddress, prm_info.type, role_ja ]); } else { array.push([ "", // 出力形式上、最初のメンバー以外の配列には共有ドライブ名不要 prm_info.name, prm_info.emailAddress, prm_info.type, role_ja ]); } } } catch (err) { console.log(err); array.push([err]); continue; } } drv_token = drv_list.nextPageToken; } while (drv_token); // 配列をGoogleシートに反映 act_sheet.clear(); act_sheet.setFrozenRows(1); act_sheet.getRange(1, 1, array.length, array[0].length).setValues(array); }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

下記サイトの情報によると、ファイルの場所が間違っているとのことですが、設定に間違いはない認識です。新しいスプシを開き、AppScriptで作成しています。

const act_sheet = SpreadsheetApp.getActive().getActiveSheet();

https://qiita.com/KONTA2019/items/768348ee0ac5462648bd

補足

以上、ご回答いただけますと幸いです!

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

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

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

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

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

int32_t

2024/01/17 08:50

ソースコードを「```js」だけの行と「```」だけの行で挟んでください。現状ではとても読みにくいです。 エラーが発生するのはどの行でしょうか。
narururu

2024/01/17 09:33

ご回答ありがとうございます。int32_tさん☺ 行の箇所は修正しました。 また、エラーは下記になります。 for (let i = 0; i < drv_list.items.length ; i++) { drv_info = drv_list.items[i]; 読みにくく大変申し訳ございません。
guest

回答1

0

ベストアンサー

js

1 for (let i = 0; i < drv_list.items.length 2 ; i++) { 3 drv_info = drv_list.items[i];

エラーは items というプロパティがないことを示しています。
リファレンスによると、items ではなく drives じゃないですかね。

js

1 for (let j = 0; j < prm_list.items.length; j++) { 2 prm_info = prm_list.items[j];

こちらも、items ではなく permissions ではないでしょうか。

投稿2024/01/17 12:20

int32_t

総合スコア21927

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

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

narururu

2024/01/18 15:04

ご回答ありがとうございます! リファレンス拝見しましたが、全く意味が分からなかったです。int32_tさんすごいですね。 今回の編集により、「メンバー」と「メール」以外は表示されました! しかし、前述の2項目はブランクのままです。 もし何か原因が分かりましたらアドバイスいただけますと幸いです!
int32_t

2024/01/19 01:07

> しかし、前述の2項目はブランクのままです。 質問文では「エラーを解決したい」とのことで、そのエラーがなくなったらこの質問は解決済みにして、新しい質問を作ることをおすすめします。
narururu

2024/01/19 07:13

仰る通りですね! ご回答ありがとうございます。新規で質問作りますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問