指定したファイルを指定した回数だけコピーするGoogle Apps Scriptです。テンプレートを受講者分コピーしたいときなどに。
特にありませんが、スプレッドシートのコンテナバインド型スクリプトとして実装しています。
多少のコード変更が必要ですが、フォーム、スライド、ドキュメントでもOKです。もちろんスタンドアロン型でも。
サンプルとしてドキュメント、フォーム、スプレッドシートの3種類のファイルを用意しました。
ドキュメントをコピーしてみます。コピーするにはファイルのURLが必要です。一度ファイルを開いて、アドレスバーに表示されているURLをコピーします。
GASを仕込んだスプレッドシートに戻り、上のメニューにある「スクリプト実行」から「指定したファイルを指定回数コピーする」を実行します。
「コピー元のファイルのURLを入力してください」とプロンプトが表示されますので、コピーしておいたURLを入力します。
続いて「コピー回数を半角数字で入力してください」と表示されます。コピーしたい数を入力します。
注意点としては、ファイルのコピーは比較的時間がかかる処理のため、あまり大きい数字を入れるとGASの実行時間制限(360秒)に引っかかるかもしれません。
たぶん100回ぐらいまでなら大丈夫だと思います。
フォルダの画面に戻って画面を眺めていると、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);
}
}
指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。
フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。
ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。
最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。
指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。
Googleドライブ上でファイル名が重複しているものを探すGoogle Apps Scriptです。同じ名前のファイルに苦しめられている方、いかがですか?
シートにGoogleドライブのファイル(URL)を記載すると、そのファイルを削除してくれるGoogle Apps Scriptです。
指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。子フォルダ(サブフォルダ)も再帰的に探して一覧を出力します。