【问题标题】:Required permissions: https://www.googleapis.com/auth/spreadsheets所需权限:https://www.googleapis.com/auth/spreadsheets
【发布时间】:2020-11-19 00:54:40
【问题描述】:

我在 appscript 上创建了一个简单的代码,用于从 URL 中获取 Google Drive 文件名

function FileName (URL) {
  var ss = SpreadsheetApp.openByUrl(URL);
  return ss.getName();
}

当我运行时出现错误:

例外:您无权调用 SpreadsheetApp.openByUrl。所需权限: https://www.googleapis.com/auth/spreadsheets (linha 6)。

我已经在 Google 高级服务区域启用了 Drive 和 Sheets API,所以“https://www.googleapis.com/auth/spreadsheets”应该没问题,但不是。

我怎样才能做到这一点?

我在this link 中创建了一个带有问题复制的样本表。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    问题说明:

    您正在使用自定义函数。

    official documentation里解释的很好:

    如果您的自定义函数抛出错误消息您没有 调用X服务的权限,该服务需要用户授权 因此不能在自定义函数中使用。

    正如消息中明确指出的,您不得在自定义函数中使用需要授权的服务,例如 SpreadsheetApp.openByUrl(URL)。

    还有一张表特别指出SpreadsheetApp.openByUrl(URL);不能在自定义函数中使用:

    解决方法:

    您可以通过多种方式使用常规函数:

    1. 作为自定义菜单按钮实现,
    2. 从脚本编辑器执行它们,
    3. 通过simple triggers执行它们,
    4. 创建插件菜单等

    脚本的常规函数​​版本:

    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,因为这个问题刚刚成为一个需要更多关注的问题。

    【讨论】:

    • 实际上这是我创建的示例中的一个问题。我的目标是获取电子表格名称。不过我喜欢你的第二个解决方案,看起来更通用。
    • @abutremutante 但在第一列中您有文件网址。不是电子表格。无论如何,请参阅我的下一个代码 sn-p。我已经为 3 个不同的问题提供了信息。现在由您来了解下一步是什么。 1) 我向您解释和解决了如何使用常规函数的方法,因为自定义函数不能那样工作,而且您过去曾发布过类似的问题。 2)我为您编写了一个脚本来读取电子表格网址并将名称粘贴到工作表中 3)我对文件做了与 2)相同的操作。这个问题即将越界了。
    • 非常感谢。我可以要求一个额外的帮助吗?你能提供一个使用简单触发器的例子吗?检查了您链接的文档,但不明白如何将其应用到我的案例中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2021-11-07
    相关资源
    最近更新 更多