見出し画像

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

【この記事は Qiita から note に移行しました】

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" となります.
よって,

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

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

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

const all_files = DriveApp.getFiles();
const all_folders = DriveApp.getFolders();

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

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

/* ルート直下 */
const files = DriveApp.getRootFolder().getFiles();

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

みたいにします.

☆ 一括取得したファイル / フォルダの「イテレータ」から一つずつファイルを取得する方法
イテレータのままではファイルやフォルダを操作することはできません. for 文や while 文で取り出します.

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

while(files.hasNext()) {
  const file = files.next();
  //この file に対する処理をここに書く
}

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

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

取得したファイルを操作

この章では

const 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 の部分にフォルダ名を入力します.

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

いいなと思ったら応援しよう!