Google App Scriptで「フォルダ丸ごとコピー」
はじめに
Googleフォームで
■コピーしたいフォルダID
■コピーしたフォルダの格納先ID
■コピーしたフォルダの名前
を入力したら、フォルダーが丸ごとコピーされるようなGoogle App Scriptが必要になったので、その手順を記載します。
ちなみに参考にさせていただいた記事は以下2つ
https://qiita.com/matsuhandy/items/9b9c7bcfbee646a16222
https://valmore.work/auto-response-from-google-form/
1) Googleフォームの作成
とりあえず適当に作ります。
2) スプレッドシートの作成
次にフォームのタブ名「回答」をクリックして、スプレッドシートのマークを選択
そして「新しいスプレッドシートを作成」を選択
3) Google App Scriptをば
新規作成したスプレッドシートのタブ名「ツール」をクリックしたのち、「スクリプトエディタ」をクリック
すると以下のような画面が出てくる
そしたら以下のコードを貼り付け
function folderCopy(e) {
// フォームの回答を取得
var srcFolderId = e.namedValues['コピーしたいフォルダ'][0];//コピー元
var srcFolder = DriveApp.getFolderById(srcFolderId);
var dstFolderId = e.namedValues['コピーしたフォルダの格納先'][0];//このフォルダー内に,フォルダーのコピーを作る
var dstFolder = DriveApp.getFolderById(dstFolderId);
var dstFolderName = e.namedValues['コピーしたフォルダの名前'][0];
if(dstFolderName=="") dstFolderName = srcFolderName;
var newFolder = dstFolder.createFolder(dstFolderName)
Logger.log(newFolder.getName());
copy(srcFolder, newFolder);//コピー元,コピー先
}
function copy(srcFolder, newFolder){
var srcFiles = srcFolder.getFiles();//フォルダ内ファイルをゲット
while(srcFiles.hasNext()) {
var srcFile = srcFiles.next();
Logger.log(srcFile.getName());
srcFile.makeCopy(srcFile.getName(), newFolder);
}
var srcFolders = srcFolder.getFolders();//フォルダ内フォルダをゲット
while(srcFolders.hasNext()) {
var nextSrcFolder = srcFolders.next();
Logger.log(nextSrcFolder.getName());
var nextNewFolder = newFolder.createFolder(nextSrcFolder.getName());
copy(nextSrcFolder, nextNewFolder);//再帰
}
}
4) トリガーの設定
時計見たいなボタンをクリック
「トリガーを追加」をクリック
フォーム送信があったら、関数実行するように設定
以上