見出し画像

【GAS】ファイルのコピーを複数作成し、ファイル名を順につけ、フォルダに保存するコード

GAS(Google Apps Script)で、元ファイルを複数コピーし、スプシにリストアップしてあるファイル名を順につけ、指定フォルダに保存するコードはどう書くの?という質問を見かけたので、書いてみました~↓

/**
 * あるファイルのコピーを、ファイル名リストに記載されたファイル名の数だけ作成し、
 * コピーした各ファイルにリストから名前をつけ、指定のフォルダに保存するコード
 * (前提)ファイル名は「ファイル名リスト」というシートに、縦一列に詰めて記載しておいてください
 */

function duplicateAndNameFiles1() {
  const sourceFileId = "コピー元ファイルのID"; // コピー元ファイルのIDを""内に入力
  const folderId = "コピー先フォルダのID"; // コピー先フォルダのIDを""内に入力
  const nameSsId = "ファイル名リストが記載されたスプシのID"; // ファイル名リストが記載されたスプシのIDを""内に入力

  const sourceFile = DriveApp.getFileById(sourceFileId); // コピー元ファイルを取得
  const folder = DriveApp.getFolderById(folderId); // コピー先フォルダを取得
  const sheet = SpreadsheetApp.openById(nameSsId).getSheetByName("ファイル名リスト"); // ファイル名リストのシートを取得

  const names = sheet.getDataRange().getValues().flat(); // ファイル名リストを配列として取得

  // ファイル名リストにある名前の数だけループして新規ファイルを作成し、
  // 名前を付け、フォルダに保存する
  names.forEach(name => {
    sourceFile.makeCopy(name, folder);
  })
}

また、コピーしたスプレッドシートのA1セルにファイル名も入力するには?という質問もあったので、こちらも書いてみました↓。ラスト3行を追加しただけです。

/**
 * あるスプレッドシートのコピーを、ファイル名リストに記載されたファイル名の数だけ作成し、
 * コピーした各ファイルにリストから名前をつけ、さらにファイルの1シート目のA1セルにファイル名を入力し、指定のフォルダに保存するコード
 * (前提)ファイル名は「ファイル名リスト」というシートに、縦一列に詰めて記載しておいてください
 */

function duplicateAndNameFiles2() {
  const sourceFileId = "コピー元ファイルのID"; // コピー元ファイルのIDを""内に入力
  const folderId = "コピー先フォルダのID"; // コピー先フォルダのIDを""内に入力
  const nameSsId = "ファイル名リストが記載されたスプシのID"; // ファイル名リストが記載されたスプシのIDを""内に入力

  const sourceFile = DriveApp.getFileById(sourceFileId); // コピー元ファイルを取得
  const folder = DriveApp.getFolderById(folderId); // コピー先フォルダを取得
  const sheet = SpreadsheetApp.openById(nameSsId).getSheetByName("ファイル名リスト"); // ファイル名リストのシートを取得

  const names = sheet.getDataRange().getValues().flat(); // ファイル名リストを配列として取得

  // ファイル名の数だけループしてコピーファイルを作成し、
  // ファイル名を付け、1シート目のA1セルに名前を入力し、フォルダに保存する
  names.forEach(name => {
    const newFile = sourceFile.makeCopy(name, folder);
    const newFileId = newFile.getId();
    const newSs = SpreadsheetApp.openById(newFileId);
    newSs.getSheets()[0].getRange("A1").setValue(name);
  })
}

なお、上記のコードは1シート目のA1セルにファイル名を入れる設定です。もしも1シート目に既に情報が入っている元ファイルをコピーする場合は、ループの中でシートを追加してそのA1セルにファイル名を入れるようにするなどの変更をした方が良さそうですね~。

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