以前このブログで
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)