![見出し画像](https://assets.st-note.com/production/uploads/images/99072091/rectangle_large_type_2_463465d97891cf22c56665efdadf17a8.jpeg?width=800)
指定したGoogleドライブフォルダにファイルをコピー(その2)[GAS]
先日、「指定したGoogleドライブフォルダにファイルをコピー」という記事を書きました。
その際は「各社員からの提出がそろったところで実行する」という前提のスクリプトでしたが、状況によっては「フォーム送信時に即時的に実行したい」という時もあります。
Googleフォームの送信トリガーを用いて実装します。
あらかじめ、部署名とそれに対応するGoogleドライブ中のフォルダのURL、IDをシート「部署名DB」に用意しておきます。
![](https://assets.st-note.com/img/1677507384098-quLHp8rOT0.png?width=800)
(※実際には「フォルダURL」は不要ですが、今回はあえて列Bにその列を設け、列C「フォルダID」に以下の関数を仕込んでIDを抽出しています)
【セルC2に仕込んだ関数】
=INDEX(SPLIT(B2,"/"),COLUMNS(SPLIT(B2,"/")))
※セルC3以降も同様
次に、Googleフォームの右上にある三点リーダーより「スクリプトエディタ」を開き、以下のスクリプトを記します。
![](https://assets.st-note.com/img/1677507438480-TwWQ5W7rdO.png)
function onSubmit(e) {
const itemResponses = e.response.getItemResponses();
const dept = itemResponses[1].getResponse(); //2番目の質問「部署名」への回答を定数「dept」に代入
const url = itemResponses[2].getResponse(); //3番目の質問「ファイルURL」への回答を定数「url」に代入
const id = url.split('/d/')[1].split('/')[0];
//タイムスタンプを取得しファイル名の先頭に付与する
const timeStamp = e.response.getTimestamp();
const timeStr = Utilities.formatDate(timeStamp, 'JST', 'yyyyMMdd_HHmmss') + '_';
const fileName = DriveApp.getFileById(id).getName();
const rename = timeStr + fileName;
const tgtFolderId = getFolderId(dept); //部署名を関数getFolderIdに渡し、部署に割り当てたフォルダのIDを取得
const tgtFolder = DriveApp.getFolderById(tgtFolderId);
DriveApp.getFileById(id).makeCopy(rename, tgtFolder);
}
//部署名を受け取り、シート「部署名DB」からフォルダIDを返す関数
function getFolderId(dept) {
const deptSheet = SpreadsheetApp.openById('***スプレッドシートID***').getSheetByName('部署名DB');
const deptData = deptSheet.getDataRange().getValues();
deptData.shift();
//部署名が一致したら列CのフォルダIDを返す
for (const data of deptData) {
if (data[0] === dept) {
return data[2];
}
}
}
function「onSubmit」にフォーム送信時トリガーを作成します。
![](https://assets.st-note.com/img/1677507518255-ZbzIuXbVt1.png?width=800)
以上の実装で、フォームが送信された際にGASが実行され指定されたGoogleドライブフォルダにファイルをコピーすることができます。
※類似記事として「ファイルのショートカットを作成する」というケースを書きました。
この記事が気に入ったらサポートをしてみませんか?