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

以下をスプレッドシートに結びついた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にクローズされました