見出し画像

指定したGoogleドライブフォルダにファイルをコピー(その2)[GAS]

先日、「指定したGoogleドライブフォルダにファイルをコピー」という記事を書きました。

その際は「各社員からの提出がそろったところで実行する」という前提のスクリプトでしたが、状況によっては「フォーム送信時に即時的に実行したい」という時もあります。
Googleフォームの送信トリガーを用いて実装します。

あらかじめ、部署名とそれに対応するGoogleドライブ中のフォルダのURL、IDをシート「部署名DB」に用意しておきます。

(※実際には「フォルダURL」は不要ですが、今回はあえて列Bにその列を設け、列C「フォルダID」に以下の関数を仕込んでIDを抽出しています)

【セルC2に仕込んだ関数】
=INDEX(SPLIT(B2,"/"),COLUMNS(SPLIT(B2,"/")))
※セルC3以降も同様

次に、Googleフォームの右上にある三点リーダーより「スクリプトエディタ」を開き、以下のスクリプトを記します。

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」にフォーム送信時トリガーを作成します。

以上の実装で、フォームが送信された際にGASが実行され指定されたGoogleドライブフォルダにファイルをコピーすることができます。

※類似記事として「ファイルのショートカットを作成する」というケースを書きました。


この記事が気に入ったらサポートをしてみませんか?