所以我需要從電子表格中的一系列 Google Drive URL 中獲取檔案名串列。瀏覽網路,我發現了下面的代碼。它有效,但僅適用于舊式 url,我聽說 Google 在 2021 年 9 月更改了它。請注意,鏈接功能不全,請替換為真實鏈接以進行檢查!
舊樣式是:
https://drive.google.com/file/d/1GMUwYxZxsNpLiaYOiVMBwl41LpreQ-fc/view?usp=sharing
從下面的代碼中可以正常作業。
我想要的是兩件事。
它應該處理一系列的列,當前正在讀取AE2:AE,并在 上列印出來AM2:AM。我想要的是遍歷 range:AE2:AL并列印出來:AM2:AT
其次它還應該處理較新的表單 url:
https://drive.google.com/file/d/0B9EZQqsLDEqDUGlsdy1oVEtETGs/view?usp=sharing&resourcekey=0-h7HOcxayPaHJ5r6dAAslVQ
當前代碼:
function getNames() {
var activeRange = SpreadsheetApp.getActiveSheet().getDataRange();
var height = activeRange.getHeight();
var links = SpreadsheetApp.getActiveSheet()
.getRange("AE2:AE" height)
.getValues();
var nameValues = [];
links.forEach((row) => {
try {
var link = row[0];
var fileID = getIdFromLink(link);
var name = DriveApp.getFileById(fileID).getName();
nameValues.push([name]);
} catch (e) {
nameValues.push(["NO NAME FOUND"]);
}
});
var nameRange = SpreadsheetApp.getActiveSheet().getRange("AM2:AM" height);
nameRange.setValues(nameValues);
}
function getIdFromLink(link) {
var regex = new RegExp(
/(?<=https:\/\/drive\.google\.com\/file\/d\/)(. )(?=\/)/
);
return regex.exec(link)[0];
}
應該如何修改上面的代碼以啟用我想要的。抱歉,我嘗試了幾個 if/else 陳述句,但我的 Javascript 知識非常有限。任何幫助將不勝感激。
當前“螢屏截圖”顯示:
(1) - 舊式 url - 正確拾取檔案名 (2) (3) - 新式 url - 未拾取檔案名 (4)

uj5u.com熱心網友回復:
getIdFromLink()只要檔案沒有以需要資源密鑰的方式共享,您的函式就應該可以正常作業。
要使用資源鍵,請使用DriveApp.getFileByIdAndResourceKey(),如下所示:
function getFileNamesByLink() {
const sheet = SpreadsheetApp.getActiveSheet();
const sourceRange = sheet.getRange('AE2:AL');
const targetRange = sheet.getRange('AM2');
const fileNames = sourceRange.getValues()
.map(row => row.map(link => getFileNameFromLink_(link)));
targetRange
.offset(0, 0, fileNames.length, fileNames[0].length)
.setValues(fileNames);
}
function getFileNameFromLink_(link) {
if (!link) {
return null;
}
const fileId = getIdFromLink_(link);
if (!fileId) {
return NaN;
}
let file;
try {
file = DriveApp.getFileById(fileId);
} catch (error) {
try {
file = DriveApp.getFileByIdAndResourceKey(fileId, getResourceKeyFromLink_(link));
} catch (error) {
return NaN;
}
}
return file.getName();
}
function getIdFromLink_(link) {
const match = String(link).match(/file\/d\/([-\w] )/i);
return match ? match[1] : null;
}
function getResourceKeyFromLink_(link) {
const match = String(link).match(/resourcekey=([-\w] )/i);
return match ? match[1] : null;
}
請注意,如果您有數千個鏈接,腳本可能會超時。如果發生這種情況,請以零碎的方式處理鏈接,或查看高級驅動器服務是否適合您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/381020.html
標籤:javascript 谷歌应用程序脚本 谷歌表格 谷歌驱动器API
