スポンサーリンク

スプレッドシートのリストにある値の名前でスプレッドシートを複製する

以前、スプレッドシートのシートを複製する方法をやったのですが、今回はスプレッドシートを複製する方法になります。

やりたいこととしては、

  • フォーマットになるスプレッドシートを準備して、リストにある名前をスプレッドシートの名前にしてスプレッドシートを複製する
  • リストの横に作成したスプレッドシートへのリンクを作成する

前準備

  1. 複製元のフォーマットとなるスプレッドシートを準備
  1. ファイル作成用のスプレッドシートを準備
  1. ファイル作成用のスプレッドシートに、複製するファイル名のリストを作成する。
スポンサーリンク

コード

ファイル作成のスプレッドシートで、[拡張機能 - Apps Script ]からエディタを開き、以下のコードをコピペしてください。

  • フォーマットファイルのIDのみ、ご自身で準備されたフォーマットファイルのIDに置き換えてください。
/**
 * フォーマットファイルをコピーして、
 * listシートの名前でファイルを複製する。
 */
function create_file() {

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

  // フォーマットファイルのID
  const FORMAT_FILE_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

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

  // アクティブなスプレッドシートを取得
  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. 実行をすると、ファイル作成用のスプレッドシートがあるフォルダに、「yyyyMMddhhmmss」形式の名前のフォルダが作成されます。
  1. 作成されたフォルダの中に、フォーマットファイルを複製して作成されたスプレッドシートが作成されています。
  1. ファイル作成用のスプレッドシートのファイル名のシートの横には複製して作成したスプレッドシートへのリンクも作成されます。
スポンサーリンク
レンタルサーバー
おすすめの記事