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

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

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

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

Google ドライブ

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

Google Apps Script

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

Q&A

解決済

1回答

8240閲覧

GASで特定フォルダ内のフォルダ名一覧を作る方法を教えてください。

MOOO

総合スコア7

Google スプレッドシート

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

Google ドライブ

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/03/04 06:10

編集2020/03/05 06:25

Googleドライブ上のフォルダ、ファイル整理をしています。
ファイル名一覧は、下記コードで取得できたのですが、フォルダ名一覧を取得するコードへと書き換えるのに手詰まりとなってしまいました。

状況としては、ある成果物に関して
・Aというフォルダに、各成果物の名称のついた「ファイル」
・Bというフォルダに、各成果物の名称のついた「フォルダ」(その中に複数関連ファイル *今回はそちらのファイル名は不要) が存在していたため
Aのファイル名一覧・フォルダ名一覧を照らし合わせて、全体の過不足を確認したく思っております。

実現したいことは、①②(可能であれば③)で、①については下記コードで実現できたものの、②がうまく行かずに困っています。
①特定フォルダ下のファイル名取得
②特定フォルダ下のフォルダ名取得
(③特定フォルダ下のフォルダ名+ファイル名取得)

大変お手数ですが、みなさまお知恵を拝借できれば大変助かります。

▼フォルダ名取得

function myFunction() { var names= []; var ids = []; var types = []; var createds = []; var updateds = []; var folder = DriveApp.getFolderById("XXXXXXXX"); var contents = folder.getFiles(); while(contents.hasNext()) { file = contents.next(); name = file.getName(); id = file.getId(); type = file.getMimeType(); created = file.getDateCreated(); updated = file.getLastUpdated(); types.push(type); createds.push(created); updateds.push(updated); names.push(name); ids.push(id); } var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getActiveSheet(); var row = 1; var view_path = "https://drive.google.com/file/d/"; for(var i = 0; i < ids.length; i++){ sh.getRange(row, 1).setValue(names[i]); sh.getRange(row, 2).setValue(ids[i]); sh.getRange(row, 3).setValue(view_path + ids[i] + "/view"); sh.getRange(row, 4).setValue(types[i]); sh.getRange(row, 5).setValue(createds[i]); sh.getRange(row, 6).setValue(updateds[i]); row++; } }

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

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

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

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

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

papinianus

2020/03/04 12:40 編集

フォルダとファイルを別々に一覧化する用途が理解不能なのですが、もしかしてフォルダの一覧を取得するコードを回答したら、別の質問が作成されてファイルとフォルダあわせて一覧したい、とかいう要望がでてきませんよね。 ドライブ上の整理なのに、特定のフォルダの配下のファイルを列挙しているのも理解不能です。 もし作って欲しいなら本当にやりたいことをかいてください。 もし自力で解決する気があって小出しにしているならフォルダを取得しようとしたコードを貼ってください。
MOOO

2020/03/05 06:19

ご指摘ありがとうございます。長期的視点が足らずに失礼しました。 状況としては、ある成果物に関して ・Aというフォルダに、各成果物の名称のついた「ファイル」 ・Bというフォルダに、各成果物の名称のついた「フォルダ」(その中に複数関連ファイル *今回は不要) が存在していたため、Aのファイル名一覧・フォルダ名一覧を照らし合わせて、全体の過不足を確認したいというものでした。 不慣れな上に、ファイル名のコードもフォルダ名のコードも調べながら何度も試し、なかなかうまくいない状況に焦っておりました。改めて状況とこれからのニーズを整理させていただきます。
guest

回答1

0

ベストアンサー

こちらのサイトが参考になりそうです。
https://excel-ubara.com/apps_script1/GAS037.html

※サイトより抜粋

Google

1function mySample37_1() { 2 var sheet = SpreadsheetApp.getActiveSheet(); 3 var key = DriveApp.getRootFolder().getId(); //rootフォルダ 4 var name = "" 5 var i = 0 //フォルダを処理する行位置 6 var j = 0 //サブフォルダを出力する行位置 7 sheet.clear() //シートをクリア 8 do { 9 //フォルダ一覧を取得 10 var folders = DriveApp.searchFolders("'"+key+"' in parents"); 11 //フォルダ一覧からフォルダを順に取り出す 12 while(folders.hasNext()){ 13 //シートにフォルダ名称とIdを出力 14 i++ 15 var folder = folders.next(); 16 sheet.getRange(i, 1).setValue(name + folder.getName()); 17 sheet.getRange(i, 2).setValue(folder.getId()); 18 } 19 //シートからフォルダを取得し次へ 20 j++; 21 name = sheet.getRange(j, 1).getValue() + " > "; 22 key = sheet.getRange(j, 2).getValue(); 23 } while (key != ""); //処理するフォルダがなくなるまで 24}

これはrootから探していますが、そこを該当のフォルダに変更してみてはいかがでしょう。

投稿2020/03/04 10:55

mkk

総合スコア378

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

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

MOOO

2020/03/05 06:31

ご回答本当にありがとございます! rootフォルダ→該当フォルダに変更してやってみました。 var key = DriveApp.getFolderById("XXXXX"); //rootフォルダ→該当フォルダ すると下記の部分で、「Exception: 指定された ID のアイテムは見つからなかったか、アクセスする権限がありません。」とエラーが出ました。自分のドライブ上で試したので、権限はあるはずと認識しております。指定の方法に問題があるのでしょうか・・・。 //フォルダ一覧からフォルダを順に取り出す while(folders.hasNext()){ //シートにフォルダ名称とIdを出力 i++ var folder = folders.next(); sheet.getRange(i, 1).setValue(name + folder.getName()); sheet.getRange(i, 2).setValue(folder.getId()); }
mkk

2020/03/05 08:24

keyには直接フォルダIDを指定してみて下さい。 var key = "XXXXX"; その上で今回の案件に合うようにプログラムを改変するならば 最初に添付したプログラムから、do whileが不要になりそうですね。 こちらでも動作確認できましたので、一度チャレンジしてみて下さい。 それでも動かなければこちらのソースを添付させていただきます。
MOOO

2020/03/05 08:36

無事動作しました!本当に助かります。ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問