google-apps-script - 通过 Google Sheets API 使用 REST 调用更新 Google Sheet
问题描述
我正在尝试使用 Postman 或 Curl 的 REST API 调用将一些数据写入谷歌电子表格。通过遵循官方文档、一些教程和博客,我做了以下工作。
- 创建一个谷歌控制台项目。
- 启用 Google Sheet API。
- 创建一个新服务并下载密钥 JSON 文件(具有工作表 API 访问权限和编辑器角色)。
- 使用 Google Cloud SDK 激活服务帐户 (
CLI command: gcloud auth activate-service-account --key-file keys.json
) - 获取访问令牌 (
CLI command: gcloud auth print-access-token
)
我要写入数据的 Google 电子表格是私有的,只有 REST 客户端和我自己才能写入数据。也无法创建 OAuth 凭据并使用它们来验证 REST 应用程序,因为这不涉及任何用户。此外,我无法与服务帐户生成的邮件(来自 UI)共享电子表格,因为组织禁用了外部共享选项。也不可能将工作表公开发布。
我在网上找到的所有资源都要求从 UI 将服务帐户邮件添加到工作表中。有没有其他方法可以做到这一点,因为在我的情况下这是不可能的?
笔记
我收到以下错误(因为我没有与服务帐户邮件共享我的工作表)
{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT",
"domain": "googleapis.com",
"metadata": {
"service": "sheets.googleapis.com",
"method": "google.apps.sheets.v4.SpreadsheetsService.GetValues"
}
}
]
}
}
解决方案
您可以使用一个小的更改将服务帐户转变为适合您情况的有用工具。您可以授予它域范围的委派以访问用户数据。这样,您可以使用该帐户访问任何用户数据(无需事先与服务帐户共享)。请问我任何其他疑问。
推荐阅读
- reactjs - 按钮单击后ReactJS清除输入值(不能使用提交)
- java - 如何摆脱实例?
- r - 如何更改和添加具有新 ID 名称的新列
- python - 如何从字符串的末尾提取子字符串?
- python - python模拟不流畅,产生输出也需要很多时间
- gnu-parallel - GNU 并行动态字符串替换中的错误
- templates - 迭代 Jinja 模板中的变量
- javascript - 下载多个 pdf 文件以在单个文件夹中发送给用户 - React/firebase?
- sql - 编译抛出`不能使用提供的参数调用以下函数`
- node.js - 如何将 VSCode Intellisense 与转译的 TypeScript NodeJS 类一起使用