どうも。つじけ(tsujikenzo)です。このシリーズでは 「Googleドライブのファイル名を一括変換しよう」 について、全3回でご紹介します。今日は最終回です。
前回のおさらい
前回は、変換後のファイル名をスプレッドシートで準備しました。
今回は、「ファイル名を変換しよう」 をお届けします。
ファイル名を変更する
スクリプトエディタで作業します。
前回取得した、2次元配列をつかって、ファイルオブジェクトを取得しながら、setName()メソッドで変換していきます。
for (const record of renames) {
const id = record[0];
const rename = record[2];
const file = DriveApp.getFileById(id);
file.setName(rename);
}
コードを実行すると、このようにファイル名が変換されます。
関数の切り分け
コードが少し長くなってきたので、ファイル名の取得と、ファイル名を変換する処理を、関数に切り分けましょう。
1つ目は、ファイル名を取得する関数です。
/**
* 指定したフォルダからファイルIDとファイル名を取得する関数
* @return{Array} e.g [[id,元ファイル名,変換後のファイル名]]
*/
function getFileIdNames() {
//フォルダからファイルを取得する
const folder = DriveApp.getFolderById('Folder ID');
const files = folder.getFiles();
const fileArray = [];
//2次元配列の作成
while (files.hasNext()) {
const file = files.next();
const id = file.getId();
const name = file.getName().replace(/\..+$/, "");
fileArray.push([id, name]);
}
//スプレッドシートに貼り付ける
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange(2, 1, fileArray.length, fileArray[0].length);
range.setValues(fileArray);
}
2つ目は、スプレッドシートの値を取得し、ファイル名を変換する関数です。
function setRename() {
//スプレッドシートの値を取得する
const sheet = SpreadsheetApp.getActiveSheet();
const lastLow = sheet.getLastRow();
const renames = sheet.getRange(2, 1, lastLow - 1, 3).getValues();
//ファイル名を変更する
for (const record of renames) {
const id = record[0];
const rename = record[2];
const file = DriveApp.getFileById(id);
file.setName(rename);
}
}
ファイル名を元に戻したい!
なぜ関数を切り分けたかというと、もし、ファイル名の変換を万が一間違ったときに、スプレッドシートの値を使って元の状態に戻すためです。
ファイル名を元に戻すばあいは、スプレッドシートのH列やI列などに、元ファイル名をコピペして逃がしておきます。
逃がしておいた元ファイル名をE列にコピペして、setRename()関数を実行すればOKです。(E列に入力していた式は消えてしまうのでもう一度入力しましょう)
元のファイル名に戻せました。
関数の運用例
関数を切り分けることにより、さまざまな活用方法が考えられます。
GASは、定期的に実行される時限式トリガーを設定できるのが強みです。
- ある特定のフォルダを定期的にスキャンして、ファイル名一覧をスプレッドシートに出力する
- ファイル名に特定のキーワードが含まれていたら、ファイル名の前方に特定のキーワードを追加する
- 関数をカスタムメニューに追加し、任意のタイミングでファイル名を取得、変更する
まとめ
以上で、「ファイル名を変換しよう」 をお届けしました。
Rename後のファイルを自動で移動したり、削除するコードは、また機会があればご紹介できればと思います。