以前このブログで
Googleドライブのファイルをコピーして指定フォルダに入れる
というコードを書きましたが
それと同じことをスクリプトファイルのIDを渡してやろうとしたら
フォルダを指定しているのにマイドライブにコピーファイルが保存されてしまった
同じコードでスプレッドシートのIDを渡すと指定したフォルダにコピーされるので
コードはきっと間違っていない(はず)
何を言っているのかわからない場合はきっとこのコードは役に立ちません。。
今回ぶつかった壁の回避策として以下の手順で代替するコードを書きました
- コピーを作る
- 指定したフォルダにaddする
- 元のファイルをremoveする
コード.gs
var FILE_ID = "ID";
var COPY_FOLDER_ID = "ID";
function copy_file_to_folder() {
var file = DriveApp.getFileById(FILE_ID);
var copy_file = make_copy_to_mydrive(file);
remove_file(copy_file.getId(), COPY_FOLDER_ID);
}
function make_copy_to_mydrive(file) {
var copy_file_name = "Copy of " + file.getName() + format_date();
var copy_file = file.makeCopy(copy_file_name);
return copy_file;
}
function remove_file(file_id, folder_id){
var target_folder = DriveApp.getFolderById(folder_id);
var file = DriveApp.getFileById(file_id);
var parent_folder = file.getParents().next();
target_folder.addFile(file);
parent_folder.removeFile(file);
}
function format_date(){
var date = new Date();
var formated = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss:sss');
return formated;
}
|
意訳ファイルのID コピー先のフォルダのID この機能がやること オリジナルのファイルを取得して マイドライブにコピーを作成して コピーしたファイルを指定したフォルダに移動する この機能がやること コピーファイルの名前を決めて マイドライブにファイルをコピーして(フォルダを指定しないとマイドライブになる) コピーしたファイルを返す この機能がやること コピー先のフォルダを取得して(受け取ったIDから取得) 受け取ったファイルID(コピーしたファイル)を取得して ファイルの親フォルダを取得して コピー先のフォルダにファイルを追加して 親フォルダの中からファイルを削除する この機能がやること 現在日時を取得して フォーマットして 返す |
ちなみにマイドライブにコピーする場合は
コード.gsvar FILE_ID = "ID";
function copy_file_to_mydrive() {
var file = DriveApp.getFileById(FILE_ID);
var name = "Copy of " + file.getName();
file.makeCopy(name);
}
|
参考
removeFile(child)
https://developers.google.com/apps-script/reference/drive/drive-app#removeFile(File)