我在 appscript 上创建了一个简单的代码,用于从 URL 中获取 Google 云端硬盘文件名
function FileName (URL) {
var ss = SpreadsheetApp.openByUrl(URL);
return ss.getName();
}
当我运行时出现错误:
Exception: You do not have permission to call SpreadsheetApp.openByUrl. Required permissions: https://www.googleapis.com/auth/spreadsheets (linha 6).
我已经在高级 Google 服务区域启用了 Drive 和 Sheets API,因此“https://www.googleapis.com/auth/spreadsheets”应该没问题,但事实并非如此。
我怎样才能做到这一点?
我在this link中创建了一个示例表问题复制。
最佳答案
问题说明:
您正在使用自定义函数。
official documentation 中有很好的解释。 :
If your custom function throws the error message You do not have permission to call X service., the service requires user authorization and thus cannot be used in a custom function.
正如该消息明确指出的那样,您不得在自定义函数中使用需要授权的服务,例如 SpreadsheetApp.openByUrl(URL)
。
还有一个表格特别指出SpreadsheetApp.openByUrl(URL);
不能在自定义函数内使用:
解决方法:
您可以通过多种方式使用常规函数:
- 作为自定义菜单按钮实现,
- 从脚本编辑器执行它们,
- 通过 simple triggers 执行它们,
- 创建插件菜单等。
脚本的常规函数版本:
function FileName () {
var URL = "spreadsheet_url"
var ss = SpreadsheetApp.openByUrl(URL);
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange('A1').setValue(ss.getName());
}
执行后(参见屏幕截图),此脚本会将 Sheet1
的单元格 A1
的值设置为电子表格文件的名称。
我建议您在官方文档中查找我在此脚本中使用的函数,看看它们各自的作用。
更新:
我刚刚打开您的工作表,发现您正在使用 SpreadsheetApp.openByUrl(URL);
但此方法仅适用于电子表格,因此类名为 SpreadsheetApp
。如果你想打开一个文件ID那么你需要使用 getFileById(id) 。我在第一列中看到您有文件 URL,但没有方法通过 URL 打开文件。来自这样的文件的 id:
https://drive.google.com/file/d/1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp/view?usp=sharing
是:
1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp
因此你需要使用
var 文件 = DriveApp.getFileById('1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp')
代码片段如下:
function FileName () {
var URL = "1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp"
var file = DriveApp.getFileById(URL);
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange('B1').setValue(file.getName());
}
请熟悉 GAS,因为这个问题刚刚成为一个需要更多关注的问题。
关于google-apps-script - 所需权限 : https://www. googleapis.com/auth/spreadsheets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895519/