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 の部分にフォルダ名を入力します.
ちなみに フォルダをコピーすることはできません ので、フォルダを一括コピーしたい場合は, フォルダを新規作成をしてそのフォルダのなかにファイルをコピーします.