gpt4 book ai didi

google-apps-script - 谷歌应用程序脚本 : What is the correct way to check if I have access to a Google Spreadsheet by URL

转载 作者:行者123 更新时间:2023-12-05 05:45:21 26 4
gpt4 key购买 nike

我目前正在 Google 表格中编写 Google Apps 脚本,以从电子表格列表中读取数据(电子表格网址由用户提供)。但是,在调用 SpreadsheetApp.openByUrl() 之前,我似乎找不到一种方法来检查 url 是否有效或用户是否有权访问电子表格。

我已经编写了以下代码来“验证”该 url:

for(int i = 0; i < urls.length; i++) {
let spreadsheet = null
try {
spreadsheet = SpreadsheetApp.openByUrl(urls[i]);
} catch (e) {
continue;
}

// Continue to do other stuff to read data from spreadsheet...
}

然而,这有一个问题,它能够捕获前几个“您无权访问所请求的文档”。异常(exception)。但是在发生一定数量的异常之后,我会得到一个无法捕获的永久错误,同时停止脚本。

有更好的方法吗?

最小可重现示例:

  1. 使用不同的谷歌帐户创建 3 个谷歌表格
  2. 使用不同的谷歌帐户,创建一个谷歌表格并将以下代码添加到 Code.gs 中
function myFunction() {
// Put any 3 real spreadsheet url that you do not have access to
let urls = [
"https://docs.google.com/spreadsheets/d/1gOyEAz0amm4RghpE4B7f26okU3PG3vWZkrfiC-SBlbw/edit#gid=0",
"https://docs.google.com/spreadsheets/d/1Oia7ADu5BmYroUq1SLyDMHTJowrwSXOhCEyNO3nXmMA/edit#gid=0",
"https://docs.google.com/spreadsheets/d/1HE_IXURpBr_FJN--mwLo6k9gih07ZEtDGBqYSk6KgiA/edit#gid=0",
]
urls.forEach(url => {
try {
SpreadsheetApp.openByUrl(url)
} catch (e) {
console.log("Unable to open this spreadsheet")
}
})
}

function onOpen() {
SpreadsheetApp.getUi().createMenu("Test").addItem("myFunction", "myFunction").addToUi()
}
  1. 在应用程序脚本面板中运行一次函数并授权应用程序
  2. 刷新此 google 表格
  3. 等待自定义菜单出现,然后按“菜单”>“我的功能”

如您所见,openByUrl() 调用位于 try catch block 内,但是当您通过自定义菜单运行该函数时,您仍然会收到“错误:您没有权限访问请求的文档。”。

执行日志: enter image description here

最佳答案

根据您的问题,我认为您的情况可能是由于 SpreadsheetApp.openByUrl 的规范或错误所致。如果我的理解是正确的,为了避免这个问题,将检查文件是否可以使用的方法放在SpreadsheetApp之前怎么样?在您的脚本中,进行以下修改怎么样?

发件人:

SpreadsheetApp.openByUrl(url)

收件人:

var fileId = url.split("/")[5];
var file = DriveApp.getFileById(fileId);
spreadsheet = SpreadsheetApp.open(file);
  • 在此修改中,使用 DriveApp.getFileById(fileId) 检索文件。当 fileId 无法使用时,会发生错误。但是在这种情况下,try-catch 是可以正常工作的。这样就不会出现SpreadsheetApp的问题。

关于google-apps-script - 谷歌应用程序脚本 : What is the correct way to check if I have access to a Google Spreadsheet by URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71405123/

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