【问题标题】:Google sheets API permission error for writing with gspread使用 gspread 写入的 Google 表格 API 权限错误
【发布时间】:2018-12-11 00:07:58
【问题描述】:

我在尝试通过外部编辑器更新电子表格的值时遇到错误。我正在使用python库'gspread';我拥有对文档的读取权限,但是当我尝试更新单元格时,我收到了 API 错误。

这是代码(隐藏的安全细节)。我在stackoverflow上查看了其他权限错误解决方案,但它们不适用于应用程序可以读取数据但不能写入数据的场景。

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = [""
      , "https://www.googleapis.com/auth/script.external_request"
      , "https://www.googleapis.com/auth/spreadsheets"
      , "https://www.googleapis.com/auth/script.container.ui"
      ,   'https://spreadsheets.google.com/feeds'
      , "https://mail.google.com/"
      , " https://www.googleapis.com/auth/drive"]

credentials = ServiceAccountCredentials.from_json_keyfile_name('project-id-[hiddenID].json', scope)

gc = gspread.authorize(credentials)

sht2 = gc.open_by_url('https://docs.google.com/spreadsheets/d/[hiddenID]')

worksheet = sht2.get_worksheet(0)

val = worksheet.acell('B1').value
print(val)



worksheet.update_acell('B6', 'Bingo!')

这是调用错误的最后一行

APIError: {
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

我已尝试授予 API 所有者访问权限,但我想我的权限错误。

感谢您的帮助!

【问题讨论】:

  • 您是否更改了范围但未刷新授权? (即删除任何本地缓存的凭据)
  • 当你说本地缓存的凭证时,那会是本地文件吗,比如credentials.json?我删除了所有其他具有凭据的 json 文件,但它没有工作。我是否正确采纳了您的建议?
  • 存储您的客户端 ID 和机密(或等效)的文件不需要删除 - 存储访问或刷新令牌的文件需要删除。令牌对新的或不同范围的授权无效。此外,请确保您已与服务帐户共享文档。

标签: google-apps-script google-api google-sheets-api gspread


【解决方案1】:

通过在帐户中添加与文档编辑相同的电子邮件来解决此问题。简单的修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2022-11-10
    • 2017-04-02
    相关资源
    最近更新 更多