LANG SELRCT

コードを書く場所についてはこちら

2018年3月27日火曜日

スクリプトファイルをコピーして指定したフォルダに入れる


以前このブログで
Googleドライブのファイルをコピーして指定フォルダに入れる
というコードを書きましたが

それと同じことをスクリプトファイルのIDを渡してやろうとしたら
フォルダを指定しているのにマイドライブにコピーファイルが保存されてしまった

同じコードでスプレッドシートのIDを渡すと指定したフォルダにコピーされるので
コードはきっと間違っていない(はず)


何を言っているのかわからない場合はきっとこのコードは役に立ちません。。


今回ぶつかった壁の回避策として以下の手順で代替するコードを書きました
  1. コピーを作る
  2. 指定したフォルダにaddする
  3. 元のファイルをremoveする



コード.gs
var FILE_ID = "ID";
var COPY_FOLDER_ID = "ID";

function copy_file_to_foder() {
  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(コピーしたファイル)を取得して
ファイルの親フォルダを取得して
コピー先のフォルダにファイルを追加して
親フォルダの中からファイルを削除する


この機能がやること
現在日時を取得して
フォーマットして
返す




ちなみにマイドライブにコピーする場合は

コード.gs
var 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)