見出し画像

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フォームの作成

とりあえず適当に作ります。

スクリーンショット 2021-08-16 1.21.36

2) スプレッドシートの作成

次にフォームのタブ名「回答」をクリックして、スプレッドシートのマークを選択

スクリーンショット 2021-08-16 1.22.31

そして「新しいスプレッドシートを作成」を選択

スクリーンショット 2021-08-16 1.25.20

3) Google App Scriptをば

新規作成したスプレッドシートのタブ名「ツール」をクリックしたのち、「スクリプトエディタ」をクリック

スクリーンショット 2021-08-16 1.26.06

すると以下のような画面が出てくる

スクリーンショット 2021-08-16 1.26.39

そしたら以下のコードを貼り付け

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) トリガーの設定

時計見たいなボタンをクリック

スクリーンショット 2021-08-16 1.27.46

「トリガーを追加」をクリック

スクリーンショット 2021-08-16 1.28.23

フォーム送信があったら、関数実行するように設定

スクリーンショット 2021-08-16 1.28.50

以上

いいなと思ったら応援しよう!