gpt4 book ai didi

google-apps-script - 从 Google Apps 脚本上的 URL 获取文件 ID 的最简单方法

转载 作者:行者123 更新时间:2023-12-02 20:46:52 26 4
gpt4 key购买 nike

这就是我想要做的事情:给定一个 Google 文档 URL,我想获取文档 ID 以在 Google 云端硬盘上创建副本。我知道我可以通过一些正则表达式或替换 URL 来实现这一点,但由于有几种不同的形式可以在 URL 中表示同一文档,因此我想找到一个通用的解决方案。

目前,这是我能想到的最好的:

function getFileIdFromUrl(url) {
try {
return getDocIdFromUrl(url);
} catch (e) {
return getSpreadsheetIdFromUrl(url);
}
}

function getDocIdFromUrl(url) {
var doc = null;
try {
doc = DocumentApp.openByUrl(url);
} catch (e) {
doc = DocumentApp.openByUrl(url + "/edit");
}
return doc.getId();
}

function getSpreadsheetIdFromUrl(url) {
var spreadsheet = null;
try {
spreadsheet = SpreadsheetApp.openByUrl(url);
} catch (e) {
spreadsheet = SpreadsheetApp.openByUrl(url + "/edit");
}
return spreadsheet.getId();
}

function copy(url) { // may throw an exception if the URL is invalid or private
var id = getFileIdFromUrl(url);
var file = DriveApp.getFileById(id);
file.makeCopy().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
}

问题是我的解决方案仅涵盖文档和电子表格,我想对任何上传的文件执行相同的操作,例如:

https://docs.google.com/file/d/0B-FYu_D7D7x4REdtRVEzVH0eU0/edit

简而言之,我想要这样的东西:

DriveApp.getFileByUrl(url).makeCopy();

有人知道这是否可行吗?

任何从文件 URL 中提取文件 ID 的安全解决方案都适合我。

谢谢

最佳答案

DriveApp 确实缺少 getFileByUrl (以及与此相关的文件夹)。您可能想在 Apps Script issue tracker 上提出增强请求.

但是我在脚本上所做的事情(因为这些 openByUrl 函数有点新)是使用正则表达式获取 id。像这样。

function getIdFromUrl(url) { return url.match(/[-\w]{25,}/); }

这个正则表达式适用于我尝试过的任何谷歌网址:文件夹和文件、融合表、电子表格、文档、演示文稿等的驱动器网址。它只是查找字符串中“看起来像”谷歌 key 的任何内容。也就是说,任何足够大的字符串,其中仅包含(google key)有效字符。

此外,即使它直接接收 ID 而不是 URL,它也能工作。当您向用户询问链接时,这很有用,因为有些人可能会直接粘贴 id 而不是 url,并且它仍然有效。

--编辑

还有一些其他答案和评论解决了一些我自己从未遇到过但可能会发生的边缘情况,例如尝试在嵌套文件夹 URL 上获取文件夹 ID,或者当您的 G-Suite 域大于 25 时长字符。对于这些情况,您可能需要使用更严格的正则表达式。

快速浏览一下下面的建议,我推荐以下 /[-\w]{25,}(?!.*[-\w]{25,})/ 因为它仍然非常简单,应该可以解决这些情况。

关于google-apps-script - 从 Google Apps 脚本上的 URL 获取文件 ID 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com