从 URL 列表中获取文件名 - Google Drive
Posted
技术标签:
【中文标题】从 URL 列表中获取文件名 - Google Drive【英文标题】:Get File Name from list of URL's - Google Drive 【发布时间】:2022-01-17 14:34:39 【问题描述】:因此,我需要从电子表格中的一系列 Google Drive URL 中获取文件名列表。在网上浏览,我遇到了下面的代码。它适用,但仅适用于旧式网址,我听说 Google 在 2021 年 9 月更改了旧式网址。 注意链接不全,请替换成真实链接查看!
旧样式是:
https://drive.google.com/file/d/1GMUwYxZxsNpLiaYOiVMBwl41LpreQ-fc/view?usp=sharing
这可以从下面的代码中正常工作。
我想要的是两件事。
它应该处理一系列的列,当前读取AE2:AE
,并在AM2:AM
上打印出来。我想要的是通过范围:AE2:AL
并打印出:AM2:AT
其次,它还应该处理较新的表单网址:
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)
【问题讨论】:
捕获后为什么没有记录错误? 【参考方案1】:只要文件没有以需要resource key 的方式共享,您的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;
请注意,如果您有数千个链接,脚本可能会超时。如果发生这种情况,请以零碎的方式处理链接,或查看Advanced Drive Service 是否适合您。
【讨论】:
这是正确的。我确实注意到它超时了,所以我将按照你提到的零碎的方式完成工作。非常感谢!以上是关于从 URL 列表中获取文件名 - Google Drive的主要内容,如果未能解决你的问题,请参考以下文章