Google Apps Script

Google Apps Scriptでリストの名前でスプレッドシートを一括複製する方法

スポンサーリンク

概要

Google Apps Scriptで、リストにある名前で、スプレッドシートを一括で複製する方法を行いたいと思います。

前準備

複製元のフォーマットファイルの準備

まずは複製元になるフォーマットファイルを準備します。

リストの作成

次にフォーマットを複製するリストのファイルを準備します。

準備をしたスプレッドシートの「リスト」の中に以下のようなリストを作成します。
シート名は「list」とします。

ポイント

今回はファイルを複製して作成したい名前のリストを作成しています。
B列のリンクは、一括複製をした際に複製して作成したファイルへのリンクを作成するセルになるので空白のままにしておいてください。

ソースコード

スクリプトエディタを開く

リストのスクリプトエディタを開きます。

参考

スクリプトエディタの開き方は、「GAS(Google Apps Script)のコンテナバインド型とスタンドアロン型」のコンテナバインドスクリプトを参考にしてください。

ソースコード

以下のソースコードをスクリプトエディターに貼り付けてください。

/**
 * スプレッドシートを一括複製
 */
function bulk_copy() {

  /**
   * 実行する前に、以下のIDを設定
   */

  // フォーマットファイルのID
  const FORMAT_FILE_ID = PropertiesService.getScriptProperties().getProperty("FORMAT_FILE_ID");

  // ------------------------------------------------------------------------

  // アクティブなスプレッドシートを取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  // カレントディレクトリ
  const current_dir = DriveApp.getFileById(spreadsheet.getId()).getParents().next();

  // ------------------------------------------------------------------------

  /**
   * listの情報を取得
   */

  // listシートを取得
  const name_list_sheet = spreadsheet.getSheetByName("list");

  // listシートの最終行を取得
  const max_row = name_list_sheet.getLastRow();

  // listを取得(A2〜最終行まで)
  const name_list = name_list_sheet.getRange(2, 1, max_row - 1).getValues();

  // ------------------------------------------------------------------------

  /**
   * 出力フォルダの作成
   */

  // 出力フォルダ名(年月日時分秒)
  const output_folder_name = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMddHHmmss');

  // 出力フォルダの作成
  const output_folder = DriveApp.getFolderById(current_dir.getId()).createFolder(output_folder_name);

  // 出力先フォルダ
  const output_dir = DriveApp.getFolderById(output_folder.getId());

  // ------------------------------------------------------------------------

  /**
   * フォーマットファイルの情報
   */

  // フォーマットファイル
  const format_file = DriveApp.getFileById(FORMAT_FILE_ID);

  // ------------------------------------------------------------------------

  /**
   * ファイルの複製の作成(繰り返し処理)
   */

  // listの件数分繰り返し
  for (let i = 0; i < name_list.length; i++) {
    
    // 名前を取得 (名前をそのままファイル名にする)
    let name = name_list[i];

    // 名前が空の場合は次へ
    if (name == "") continue;

    // フォーマットファイルをコピーしてファイルを作成する
    let newFile = format_file.makeCopy(name.toString(), output_dir);

    // シート名の隣の列(B列)にリンクを作成
    name_list_sheet.getRange(i + 2, 2).setValue('=HYPERLINK("' + newFile.getUrl() + '", "リンク")');
  }
}

実行方法

プロパティの設定

  1. 「フォーマット」のスプレッドシートIDを確認します。
参考

スプレッドシートIDの確認の方法は「スプレッドシートIDとシートIDを確認する方法」を参考にしてください。

  1. 確認したスプレッドシートIDをプロパティに「FORMAT_FILE_ID」というキーで設定します。
参考

プロパティの設定方法は「GAS(Google Apps Script)のスクリプト プロパティの使い方」を参考にしてください。

実行

メニューで「bulk_copy」が選択されていることを確認して、「実行」をクリックします。

メモ

初回実行時で「承認が必要です」とポップアップが表示された場合は、実行できるように承認を行なってください。承認方法は以前の投稿の「GASで初回実行時の承認・許可」をご覧ください。

複製されたファイルの確認

実行をしたら、「リスト」があるフォルダに「年月日時分秒(yyyyMMddHHmmss)」の名前のフォルダが作成されます。

作成されたフォルダの中に一括複製されたファイルが、リストの名前で作成されます。

リストの横には一括作成したファイルへのリンクも作成されていることが確認できます。

タイトルとURLをコピーしました