Closed1

[GAS] スプレッドシートのurlから一括ダウンロードしたい

Srgr0Srgr0

以下をスプレッドシートに結びついたGASとして作成し、適当に列名を変更して実行。
マイドライブのDownloaded Filesディレクトリに姓_名_元のファイル名でダウンロードされる。
目安として200行を超えると実行時間制限に引っかかるので注意。

function downloadAndSaveFiles() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //
  const data = sheet.getDataRange().getValues();
  const folder = DriveApp.createFolder("Downloaded Files"); // 保存先フォルダを作成

  // 列インデックスの確認
  const photoColumnIndex = data[0].indexOf("添付ファイル");
  const lastNameIndex = data[0].indexOf("姓");
  const firstNameIndex = data[0].indexOf("名");

  if (photoColumnIndex === -1 || lastNameIndex === -1 || firstNameIndex === -1) {
    Logger.log("必要な列が見つかりません。");
    return;
  }

  // 各行を処理
  for (let i = 1; i < data.length; i++) {
    const fileUrl = data[i][photoColumnIndex];
    const lastName = data[i][lastNameIndex];
    const firstName = data[i][firstNameIndex];

    if (fileUrl && fileUrl.includes("drive.google.com")) {
      try {
        const fileId = extractFileId(fileUrl);
        if (fileId) {
          const file = DriveApp.getFileById(fileId);
          const fileName = `${lastName}_${firstName}_${file.getName()}`;
          file.makeCopy(fileName, folder);
          Logger.log(`Downloaded: ${fileName}`);
        } else {
          Logger.log(`Invalid URL: ${fileUrl}`);
        }
      } catch (e) {
        Logger.log(`Error with URL: ${fileUrl}, ${e.message}`);
      }
    }
  }
}

function extractFileId(url) {
  let fileId = null;

  // パターン1: "?id=" を含むURL
  if (url.includes("?id=")) {
    const idParam = url.split("?id=")[1];
    fileId = idParam.split("&")[0]; // &以降を除去
  }
  // パターン2: "/file/d/" を含むURL
  else if (url.includes("/file/d/")) {
    const match = url.match(/\/file\/d\/([^\/]+)/);
    if (match) {
      fileId = match[1];
    }
  }

  return fileId;
}
このスクラップは2025/01/16にクローズされました