问题说明:
您正在使用自定义函数。
official documentation里解释的很好:
如果您的自定义函数抛出错误消息您没有
调用X服务的权限,该服务需要用户授权
因此不能在自定义函数中使用。
正如消息中明确指出的,您不得在自定义函数中使用需要授权的服务,例如 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 files = DriveApp.getFileById('1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp')
代码 sn-p 将是这样的:
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,因为这个问题刚刚成为一个需要更多关注的问题。