特定フォルダ内の全スプレッドシートの名前とIDを取得する。

3,774 views
Skip to first unread message

にんまりpapa

unread,
Nov 1, 2014, 5:16:50 AM11/1/14
to google-app...@googlegroups.com
GAS初級者です。
特定フォルダ内のスプレッドシートに対し、スクリプト処理をしたいと考えています。

ドライブ内の全フォルダ、全ファイルの名前とIDの取得は、あるサイトに掲載された下記サンプルで可能です。
特定のフォルダだけに絞って、その中の全ファイルの名前とIDを取得する方法をどなたかご教示下さい。

よろしくお願い致します。

function listAllData() {// ドライブ内の全フォルダ、全ファイルの名前とIDを取得し、シートに書き込む。
  var folders = DocsList.getFolders();
  var files = DocsList.getFiles();
  var sheet = SpreadsheetApp.getActiveSheet();
  var d = 1;
  sheet.getRange(d++,1).setValue("※フォルダの一覧");
  for(var i = 0;i < folders.length;i++){
    var f = folders[i];
    var nm = f.getName();
    var id = f.getId();
    sheet.getRange(d + i, 1).setValue(nm);
    sheet.getRange(d + i, 2).setValue(id);
  }
  d += folders.length + 1;
  sheet.getRange(d++,1).setValue("※ファイルの一覧");
  for(var i = 0;i < files.length;i++){
    var f = files[i];
    var nm = f.getName();
    var id = f.getId();
    sheet.getRange(d + i, 1).setValue(nm);
    sheet.getRange(d + i, 2).setValue(id);
  }
}



Takashi Yokoyama

unread,
Nov 1, 2014, 5:46:22 AM11/1/14
to google-app...@googlegroups.com
横山@GDG中国です。

DocsList#getFolder(path)を使って、引数に特定のフォルダを指定すれば可能です。

最初の
var folders = DocsList.getFolders();


var files = DocsList.getFolder("特定のパス");

に変更すればFolderの一覧を取得する部分は不要になります。
パスの指定の仕方は、

"folder/subfolder/特定のフォルダ名"
という感じです。(先頭に"/"は不要です)




2014年11月1日 18:16 にんまりpapa <sd.o...@gmail.com>:

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
Takashi Yokoyama
GDG Chugoku Manager

tksyo...@gmail.com
http://sites.google.com/site/gdgchugokuofficial/
G+: http://goo.gl/VV3eJ
twitter: @GDGChugoku

にんまりpapa

unread,
Nov 1, 2014, 6:33:43 PM11/1/14
to google-app...@googlegroups.com
横山様

ご教示ありがとうございます。

ご教示いただいた内容で下記のように試してみましたが、シート名、IDが取得できません。
パスの指定はエラーとなりませんので、間違いないと思います。

初歩的な内容で申し訳ありませんが、よろしくお願い致します。

function listAllData3() {
  var files = DocsList.getFolder("フォルダ1/フォルダ2/フォルダ3");
  var sheet = SpreadsheetApp.getActiveSheet();
  var d = 1;
  sheet.getRange(d++,1).setValue("※ファイルの一覧");
  for(var i = 0;i < files.length;i++){
    var f = files[i];
    var nm = f.getName();
    var id = f.getId();
    sheet.getRange(d + i, 1).setValue(nm);
    sheet.getRange(d + i, 2).setValue(id);
  }
}



2014年11月1日土曜日 18時46分22秒 UTC+9 Takashi Yokoyama:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Takashi Yokoyama

unread,
Nov 1, 2014, 8:29:51 PM11/1/14
to google-app...@googlegroups.com
横山です。

2点確認していただきたいのですが

1. 指定したフォルダ内にファイルが実際に置いてありますか?
(Driveで確認して表示されるかどうか)

2. 提示していただいているソースコードだと、dの値が増えないようですが、
1つのセルに上書きしているから取得できていないだけのように見えますが
全く表示されていませんか?




2014年11月2日 7:33 にんまりpapa <sd.o...@gmail.com>:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。

このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Masayo N.

unread,
Nov 2, 2014, 1:01:23 AM11/2/14
to google-app...@googlegroups.com
こんにちは おじゃまします。
スクリプトを拝見したところ
function listAllData4() {
  var folder = DocsList.getFolder("特定のパス");  //フォルダーを取得
  var files = folder.getFiles();                               //ファイルを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  var d = 1;
  sheet.getRange(d++,1).setValue("※ファイルの一覧");
  for(var i = 0;i < files.length;i++){
    var f = files[i];
    var nm = f.getName();
    var id = f.getId();
    sheet.getRange(d + i, 1).setValue(nm);
    sheet.getRange(d + i, 2).setValue(id);
  }
}
にすれば動くのでは?

2014年11月2日 9:29 Takashi Yokoyama <tksyo...@gmail.com>:

にんまりpapa

unread,
Nov 2, 2014, 1:37:45 AM11/2/14
to google-app...@googlegroups.com
横山様

日曜日にもかかわらず、ありがとうございます。

ご指摘の点ですが、1.は問題ありません。
2.は
  for(var i = 0;i < files.length;i++){
の部分の files.length がundefined になるようです。

その後、Masayo様からご教示いただいた内容でうまくいきました。

一旦フォルダを取得後、getFiles() する必要があったようです。

以上、今後ともよろしくお願い致します。

2014年11月2日日曜日 9時29分51秒 UTC+9 Takashi Yokoyama:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsubscri...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
Takashi Yokoyama
GDG Chugoku Manager

tksyo...@gmail.com
http://sites.google.com/site/gdgchugokuofficial/
G+: http://goo.gl/VV3eJ
twitter: @GDGChugoku

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

にんまりpapa

unread,
Nov 2, 2014, 1:40:38 AM11/2/14
to google-app...@googlegroups.com
Masayo様

ご教示ありがとうございました。

ご教示頂いた内容でうまく取得できました。
一旦フォルダを取得後に、ファイル内容を取得するということですね。

おかげさまで助かりました!


2014年11月2日日曜日 14時01分23秒 UTC+9 Masayo:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsubscri...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages