2022/07/20に更新

【GASで時短】ファイルを指定回数コピーする

ドライブ

指定したファイルを指定した回数だけコピーするGoogle Apps Scriptです。テンプレートを受講者分コピーしたいときなどに。

こんな悩みを解決します


  • ファイルを人数分コピーしたいが、1個ずつやるのはめんどくさすぎる!

用意するもの


特にありませんが、スプレッドシートのコンテナバインド型スクリプトとして実装しています。
多少のコード変更が必要ですが、フォーム、スライド、ドキュメントでもOKです。もちろんスタンドアロン型でも。

このスクリプトで出来ること


  • 指定したGoogle ドライブドキュメントを、指定回数だけコピーできます。
  • コピーされたファイルはオリジナルファイルと同じフォルダに配置されます。

使い方


1.スクリプトの実行

サンプルとしてドキュメント、フォーム、スプレッドシートの3種類のファイルを用意しました。

ドキュメントをコピーしてみます。コピーするにはファイルのURLが必要です。一度ファイルを開いて、アドレスバーに表示されているURLをコピーします。

GASを仕込んだスプレッドシートに戻り、上のメニューにある「スクリプト実行」から「指定したファイルを指定回数コピーする」を実行します。

2.パラメータの指定

「コピー元のファイルのURLを入力してください」とプロンプトが表示されますので、コピーしておいたURLを入力します。

続いて「コピー回数を半角数字で入力してください」と表示されます。コピーしたい数を入力します。
注意点としては、ファイルのコピーは比較的時間がかかる処理のため、あまり大きい数字を入れるとGASの実行時間制限(360秒)に引っかかるかもしれません。
たぶん100回ぐらいまでなら大丈夫だと思います。

3.結果の確認

フォルダの画面に戻って画面を眺めていると、1ファイルずつ増えてくるはずです。

他の2種類のファイル形式に対しても、問題なく動作しました。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00122/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('指定したファイルを指定回数コピーする', 'copy_file');

  // メニューを画面に追加する
  menu.addToUi();
}


function copy_file() {

  // プロンプトを表示するためにUIオブジェクトを取得
  const ui = SpreadsheetApp.getUi();

  // コピー元URLを入力するプロンプトを表示
  let response = ui.prompt('コピー元のファイルのURLを入力してください', '例:https://docs.google.com/spreadsheets/d/**********/edit', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押された場合はスクリプトを終了する
  if (response.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力されたURLを取り出す
  const url = response.getResponseText();

  // コピー回数を入力するプロンプトを表示する
  response = ui.prompt('コピー回数を半角数字で入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押された場合はスクリプトを終了する
  if (response.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力されたコピー回数を取り出す
  const times = response.getResponseText();

  // 入力されたURLからID部分だけを取り出す
  const origin_file_id = url.match(/\/d\/(.*)\//)[1];

  // コピー元ファイルを取得
  const origin_file = DriveApp.getFileById(origin_file_id);

  // コピー元ファイルの名前を取得。コピーしたファイルの名前に利用する。
  const origin_file_name = origin_file.getName();

  // コピー元ファイルが格納されているフォルダのIDを取得する
  const folder_id = DriveApp.getFileById(origin_file_id).getParents().next().getId();

  // フォルダオブジェクトを取得。ファイルのコピー時に利用する。
  const folder = DriveApp.getFolderById(folder_id);

  // 入力されたコピー回数だけループ
  for (let i = 1; i <= times; i++) {

    // ファイル名の組み立て。「コピー元のファイル名_数字連番」とする
    let copy_file_name = origin_file_name + '_' + i;

    // コピーの実行
    origin_file.makeCopy(copy_file_name, folder);

  }
}

関連するアプリ


【GASで時短】ファイル名に文字列を追加する

指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。

【GASで時短】ファイル名の一部を削除する

フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。

【GASで時短】ファイル名に作成日を追加する

ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。

【GASで時短】更新からN時間以上経過したファイルを削除する

最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。

【GASで時短】ドライブのファイルリストをスプレッドシートに出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。

【GASで整理】ドライブ上の同名のファイルを検索する

Googleドライブ上でファイル名が重複しているものを探すGoogle Apps Scriptです。同じ名前のファイルに苦しめられている方、いかがですか?

【GASで整理】URLリストを元にファイルをまとめて削除する

シートにGoogleドライブのファイル(URL)を記載すると、そのファイルを削除してくれるGoogle Apps Scriptです。

【GASで時短】再帰的にドライブフォルダ内のファイルリストを出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。子フォルダ(サブフォルダ)も再帰的に探して一覧を出力します。

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp