シートやドキュメントだけなら
ファイルをコピーして指定フォルダに入れる
でできますが
スクリプトファイルもコピーできるようにしたい場合は
スクリプトファイルをコピーして指定したフォルダに入れる
のように工夫が必要です
ここではスクリプトファイルにも対応したコードを書き残しました
「Copy」をクリックしたあとに、作成されたコピーファイルのURLも表示します
こういうUIを作りたい
それを作るコード
コード.gs
function doGet() { return HtmlService.createHtmlOutputFromFile('index'); } function copyFileToFolder(file_id, folder_id) { var file = DriveApp.getFileById(file_id); var copy_file = makeCopyToMydrive(file); removeFile(copy_file.getId(), folder_id); return copy_file.getUrl(); } function makeCopyToMydrive(file) { var copy_file_name = "Copy of " + file.getName() + formatDate() + ' ' + Session.getActiveUser().getEmail(); var copy_file = file.makeCopy(copy_file_name); return copy_file; } function removeFile(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 formatDate(){ var date = new Date(); var formated = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss:sss'); return formated; } |
index.html
<!DOCTYPE html> <html> <body> Copy file to target folder<br> <input type="text" id="file_url"> FILE URL<br> <input type="text" id="folder_url"> FOLDER URL<br> <button id="bt">Copy</button><br> <a id="folder_link" target="_blank"></a> <script> elem('bt').onclick = btClicked; function elem(id) { return document.getElementById(id); } function btClicked() { elem('folder_link').textContent = ''; var file_url = elem('file_url').value; var folder_url = elem('folder_url').value; var file_id = file_url.split('/d/')[1].split('/')[0]; var folder_id = folder_url.split('/folders/')[1]; google.script.run .withFailureHandler(onFailure) .withSuccessHandler(onSuccess) .withUserObject(folder_url) .copyFileToFolder(file_id, folder_id); } function onSuccess(copy_file_url) { elem('folder_link').href = copy_file_url; elem('folder_link').textContent = copy_file_url; } function onFailure(e) { alert([e.message, e.stack]); } </script> </body> </html> |