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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

Q&A

解決済

1回答

1600閲覧

Googleドライブ上の複数のフォルダにあるファイルのファイル名とURLの一覧表を作成したい

00503murata

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

0グッド

0クリップ

投稿2020/10/22 09:15

前提・実現したいこと

GASを使ってGoogleドライブ上の複数のフォルダにあるファイルのファイル名とURLの一覧表を作成したいと思っています。

あるスプレットシートに「フォルダリスト」「ファイル取得」というシートを作成しました。

「フォルダリスト」のシートに、対象のフォルダのフォルダ名とURLを上から順に並べていきます。
(A列にフォルダ名、B列にそのフォルダのURLを記入)

スクリプトを実行すると、「ファイル取得」のシートに全ての対象フォルダ内のファイルのリストが作成されるようにしたいです。

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

for文を使い、「フォルダリスト」で指定した各フォルダのファイル一覧を「list」に格納していきたかったのですが、
一巡ごとに「list」が上書きされてしまうらしく、完成した一覧表にはフォルダリストの最後の行にあるフォルダのファイルしか表示されません。

該当のソースコード

function GetFileListInAllFolder() {

//各種変数の設定 var ss; //「ss」という変数の型を「var」であると定義 var sheet; //「sheet」という変数の型を「var」であると定義 var range; //「range」という変数の型を「var」であると定義 var url; //「url」という変数の型を「var」であると定義 var folder_id; //「folder_id」という変数の型を「var」であると定義 var sheetName; //「sheetName」という変数の型を「var」であると定義 //「フォルダリスト」シートに記入された複数のフォルダ内のファイル情報を取得 sheetName = 'フォルダリスト'; //フォルダIDが書き込まれているシート名を指定。「フォルダリスト」というシートに目的の情報がある。 ss = SpreadsheetApp.getActiveSpreadsheet(); //「ss」はアクティブなスプレッドシートであると指定 sheet = ss.getSheetByName(sheetName); //「ss」の「sheetname」で指定されたシートを指定 var lastRow = sheet.getLastRow(); //「フォルダリスト」シートの最終行の行数を取得 //「フォルダリスト」シートに記入されたファイルを順番に「list」に取得 for(let i = 2; i <= lastRow; i++) { url = sheet.getRange(i, 2).getValue(); //「E3」のセルの座標を(行番号,列番号)の形で指定し、それに記入されたURLを取得 paths = url.split('/'), //取得したURLを「/」で区切る folder_id = paths.pop(), //上の行の「/」で区切られたURLの一番最後の部分に入っているフォルダIDを変数「folder_id」に代入 folder = DriveApp.getFolderById(folder_id); //「folder」は、「folder_id」で指定されたフォルダ files = folder.getFiles(); //「files」は「folder」の中のファイル list = []; //「list」という配列を宣言(よく分かってない) //フォルダ内のファイルを「list」に取得していく処理と思われる while(files.hasNext()) { var buff = files.next(); list.push([buff.getName(), buff.getUrl()]); }; }; //書き込むシートと範囲を設定 sheetName = 'ファイル名取得'; //書き込みを行うシート名を指定。「ファイル名取得」というシートに書き込む ss = SpreadsheetApp.getActive(); //「ss」はアクティブなスプレッドシートであると指定 sheet = ss.getSheetByName(sheetName);  //「ss」の「sheetname」で指定されたシートを指定 // 対象の範囲にまとめてデータを書き出し rowIndex = 1; //データを書き出す範囲の始点行。現在は「1」が直接入力されている colIndex = 1; //データを書き出す範囲の始点列。「1」は「A列」であることを示す。 range = sheet.getRange(rowIndex, colIndex, list.length, list[0].length); //書き込み範囲を(始点行,始点列,終点行,終点列)で指定 range.setValues(list);

}

試したこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

一巡ごとに「list」が上書きされてしまう

なら、list の初期化処理をループの外側に持ってきましょう。

Diff

1+ list = []; //「list」という配列を宣言(よく分かってない) 2 for (let i = 2; i <= lastRow; i++) { 3 url = sheet.getRange(i, 2).getValue(); //「E3」のセルの座標を(行番号,列番号)の形で指定し、それに記入されたURLを取得 4 (paths = url.split("/")), //取得したURLを「/」で区切る 5 (folder_id = paths.pop()), //上の行の「/」で区切られたURLの一番最後の部分に入っているフォルダIDを変数「folder_id」に代入 6 (folder = DriveApp.getFolderById(folder_id)); //「folder」は、「folder_id」で指定されたフォルダ 7 files = folder.getFiles(); //「files」は「folder」の中のファイル 8- list = []; //「list」という配列を宣言(よく分かってない) 9 10 //フォルダ内のファイルを「list」に取得していく処理と思われる 11 12 while (files.hasNext()) { 13 var buff = files.next(); 14 list.push([buff.getName(), buff.getUrl()]); 15 } 16 }

投稿2020/10/22 10:17

draq

総合スコア2577

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

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

00503murata

2020/10/23 01:01

できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問