Edited at

GAS入門 - DriveAppクラスリファレンス

Google Apps Script の DriveApp クラスを解説.

GAS 入門向け.


ファイル/フォルダを取得

まずは操作する対象、つまりファイルやフォルダを取得しましょう.


ID でファイル/フォルダを取得

DriveApp.getFileById(id);

DriveApp.getFolderById(id);

id の部分にはファイルの ID を指定します.

ファイルの ID は、そのファイルの URL の後ろの方にあるやつで, https://drive.google.com/open?id=0123BCDE6578MNBGDDGJIFG みたいな URL だと、ID は 0123BCDE6578MNBGDDGJIFG となります.

よって,


コード.gs

var file = DriveApp.getFileById('0123BCDE6578MNBGDDGJIFG');


と記述します. フォルダも同じです.


フォルダ内のファイル/フォルダを一括取得


コード.gs

var allFiles = DriveApp.getFiles();

var allFolders = DriveApp.getFolders();

これでマイドライブ内の全てのファイル / フォルダをイテレータという形式で取得できます.

ルート直下のみまたは特定のフォルダ内のみ取得したい場合は


コード.gs

/* ルート直下 */

var files = DriveApp.getRootFolder().getFiles();

/* フォルダ内 */
var files = DriveApp.getFolderById(id).getFiles();


みたいにします.


一括取得したファイル / フォルダの「イテレータ」から一つずつファイルを取得する方法

イテレータのままではファイルやフォルダを操作することはできません. for 文や while 文で取り出します.


コード.gs

var files = DriveApp.getRootFolder().getFiles();

var file;

while(files.hasNext()) {
file = files.next();
//この file に対する処理をここに書く
}
/* または */
for(var i=0; file.hasNext(); i++) {
file = files.next();
//この file に対する処理をここに書く
}


files.hasNext() で, 取得したイテレータ内のファイルのうち, まだ処理していないファイルがまだあるかどうかを判別します. file.next() で次のファイルが返ってきます.


取得したファイルを操作

この章ではは var file = DriveApp.getFileById(id); とします. なので file.getName();DriveApp.getFileById(id).getName(); と同じです.


名前を取得

file.getName();

これだけ. 文字列としてファイルの名前が返ってきます.


説明を取得

file.getDescription();

文字列としてファイルの説明が返ってきます.


URL を取得

file.getUrl();

文字列として URL が返ってきます.

今回は ID でファイルを取得してるので URL はこれを使わなくてもわかるんですが, 例えば DriveApp.getFiles().next(); で取得したファイルの URL はこの方法でしか取得できないのでそういうときに使います.


ファイルをコピー【ファイル限定】

/*1.*/ file.makeCopy();

/*2.*/ file.makeCopy(destination);
/*3.*/ file.makeCopy(name);
/*4.*/ file.makeCopy(name, destination);

※フォルダはコピーできません。


  1. ルート直下に「(ファイル名)-copy」みたいなファイルができます。

  2. 指定したフォルダ内に「(ファイル名)-copy」みたいなファイルができます。

  3. ルート直下に指定したファイル名でファイルができます。

  4. 指定したフォルダ内に指定したファイル名でファイルができます。

たぶん 4 を一番使います.


フォルダを作成

DriveApp.createFolder(name);

フォルダの中にフォルダを作りたい場合は,

DriveApp.getFolderById(id).createFolder(name);

name の部分にフォルダ名を入力します.

ちなみにフォルダをコピーすることはできませんので、フォルダを一括コピーしたい場合は, フォルダを新規作成をしてそのフォルダのなかにファイルをコピーします.