我可以使用具有只读权限的 DocumentApp.openById() 吗?

2024-01-09

我正在创建一个用于 Google 电子表格的 Google Apps 脚本插件,但它需要能够访问我正在使用的单独 Google 文档的内容DocumentApp.openById() https://developers.google.com/apps-script/reference/document/document-app#openById(String)。我已经给了脚本这些scopes https://developers.google.com/apps-script/concepts/scopes:

"oauthScopes": [
    "https://www.googleapis.com/auth/documents.readonly",
    "https://www.googleapis.com/auth/script.container.ui",
    "https://www.googleapis.com/auth/spreadsheets.currentonly"
  ]

但显然,这还不够。脚本告诉我它需要https://www.googleapis.com/auth/documents允许正常工作。然而,当它只需要能够查看一个文件的内容时,授予该附加组件编辑所有 Google 文档文件的权限似乎有些过分。我错过了什么吗?有没有办法赋予它对单独的 Google 文档文件的只读访问权限?

这是我用于测试的函数,大部分文档 ID 已被删除:

function getDoc() {
  var id = '1NLH----------------------------------------'
  var templateFile = DocumentApp.openById(id)
  var templateText = templateFile.getBody().getText()
  Logger.log(templateText)
}

Thanks!


我相信你的目标如下。

  • 您想要使用以下脚本从 Google 文档检索文本数据。

      function getDoc() {
        var id = '1NLH----------------------------------------'
        var templateFile = DocumentApp.openById(id)
        var templateText = templateFile.getBody().getText()
        Logger.log(templateText)
      }
    
  • 您希望使用以下范围来实现这一目标https://www.googleapis.com/auth/documents.readonly和 Google Apps 脚本。

问题和解决方法:

在现阶段,DocumentApp.openById使用文档服务,要求使用范围https://www.googleapis.com/auth/documents。看来这是当前的规范。因此,在这个答案中,作为一种解决方法,我想建议使用 Google Docs API 而不是文档服务。当使用Google Docs API时,您的脚本可以使用范围来实现https://www.googleapis.com/auth/documents.readonly.

当使用 Google Docs API 修改上面的脚本时,它会变成如下所示。

示例脚本:

在使用此脚本之前,请在高级 Google 服务中启用 Google Docs API https://developers.google.com/apps-script/guides/services/advanced#enable_advanced_services。该脚本只能在以下范围内工作https://www.googleapis.com/auth/documents.readonly.

function myFunction() {
  const documentId = "###"; // Please set the Document ID.

  const obj = Docs.Documents.get(documentId);
  const text = obj.body.content.reduce((s, c) => {
    if (c.paragraph && c.paragraph.elements) {
      s += c.paragraph.elements.map(e => e.textRun.content).join("");
    }
    return s;
  }, "");
  console.log(text)
}

参考:

  • 方法:documents.get https://developers.google.com/docs/api/reference/rest/v1/documents/get
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用具有只读权限的 DocumentApp.openById() 吗? 的相关文章

  • 如何使用 Gmail API、OAuth2 for Apps 脚本和域范围委派为 G Suite 域中的用户设置电子邮件签名

    这是我之前发布的问题 答案的后续内容 如何使用 Google 电子邮件设置 API 和 OAuth2 for Apps 脚本库为 Google Apps 域中的用户设置电子邮件签名 https stackoverflow com quest
  • Google 文档自动保存如何工作?

    好吧 我知道这听起来很普通 但我指的是 AJAX 级别 我尝试过使用 Firebug 来跟踪 NET 连接和帖子 但这是一个谜 有谁知道他们如何在不破坏网络 浏览器的情况下不断进行即时自动保存 我的猜测 这只是一个猜测 是谷歌使用推送服务
  • 将 showModalDialog() 的内容添加到剪贴板 Google 脚本

    当我单击按钮时 我已将格式化数据添加到模态对话框中 我想要的内容showModalDialog 当我单击按钮时也会自动添加到剪贴板 模态是用下面的代码生成的 并且temp是我想要添加到剪贴板的输出 Output to Html var ht
  • 寻找使用库版本的方法?

    我正在通过库在多个电子表格上部署脚本 但正如您所知 脚本 目前 还无法知道它是否正在运行最新版本 我试图通过为我的代码创建自己的版本控制来找到解决此问题的方法 我有一个 Web 服务返回我的库代码的最新版本号 以便我可以对其进行比较 但 o
  • 您无权执行该操作

    我有一个时间触发的脚本 可以定期从外部源检索内容并用它更新 Google 网站页面 根据this https developers google com apps script guides triggers installable res
  • Google 表单中的隐藏字段

    我正在为每次提交的表单添加一个唯一的 ID 现在 我将该 ID 设置为第一个字段 并预先填充了该 ID 以及要求用户不要修改该字段的帮助文本 是否有任何选项无法向用户显示此选项 我假设您只对在用户填写表单之前以编程方式分配唯一 ID 的方式
  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • 在网页中显示 Google 工作表单元格的内容

    我有一个包含 html 代码的单元格的 google 工作表 我想知道在网页中显示此 html 的最佳方式 我尝试过谷歌电子表格 API 和谷歌可视化 API 以下是如何使用 Javascript 图表 API 显示单个单元格中的信息 也许
  • 触发器根据其创建维护激活序列并在每次运行时保护电子表格数据

    我正在向我的 Web 应用程序发送 5 个请求 import requests backodds 3 00 layteam Flamengo layodds 1 50 advantage 25 55 webAppsUrl https scr
  • 使用 JavaScript 将数字缩写(5.2k、1.7m 等)转换为有效整数

    我有一个 Google 文档 其中有一列包含用 速记 编写的各种数字 例如 5k for 5 000 86 62k for 86 620 4 1m for 4 100 000 1 2b for 1 200 000 000 我想使用 Java
  • 如何在 Google 电子表格中使用 Google 脚本从相邻单元格获取值?

    如果之前有人问过这个问题 我深表歉意 但我已经寻找了一个例子 不幸的是我无法找到答案 因此我为什么在这里问 如果我在 Google 电子表格中有一个自定义函数 如果内容是动态生成的 我如何获取单元格的值 当它是固定值时我可以获取该值 但当它
  • 如何使用 Google Apps 脚本编辑现有的 Google 表单项(问题)

    我有一个谷歌脚本来构建谷歌表单 该脚本使用包含问题和相应选项的电子表格填写表单 表格中显示的问题需要定期更新 我希望通过更改电子表格中的问题来更新表单中的问题 如下所示 I use onOpen 对于脚本 以便每次访问表单时 脚本都会重建最
  • Google Apps 脚本是否允许任何类型的内省?

    Google Apps 脚本可以学习自己的名称吗 或者它的ID 它可以获取其包含文件夹的 ID 吗 它可以了解它在文件夹层次结构中的位置吗 脚本 A 可以获取 设置脚本 B 的属性吗 脚本 A 可以编辑脚本 B 使用的库的任何方面吗 脚本
  • 通过 Apps 脚本强制刷新公式

    有时 更改单元格的值时 电子表格中的公式不会自动刷新 并且单元格上会出现注释以选择该单元格 然后按 CTRL SHIFT E 强制重新加载公式 我想从 Apps 脚本调用此重新加载函数 有没有办法用 Apps 脚本来做到这一点 我尝试了 S
  • 将按钮添加到 Google 表格并在单击时为单元格设置值

    我是 Google 脚本的新手 我有一个包含 5 列的 Google 表格 在每一列上我需要一个按钮 带有文本1 2 3 4 5 在每个按钮上单击我需要将按钮文本设置为相应的单元格并隐藏单击的按钮 是否可以 您可以插入看起来像按钮的图像 然
  • 当 Google 任务标记为“已完成”时如何触发 Google 脚本

    Google Apps 脚本允许由各种事件触发脚本 看here https developers google com apps script guides triggers 当用户将任务标记为已完成 在 Google 任务中 时 我想更新
  • 如何在多个文档中使用 Google Apps 脚本

    我有一个谷歌应用程序脚本 我想在多个文档中使用它 我也可能想稍后在这些文档中更改它 因此我必须使用same所有这些文档中的脚本 而不是该脚本的副本 我知道以下问题可能属于重复问题 但我不愿意接受它的答案 Google Apps 脚本 如何在
  • Crypto-Js 库的 hmac-256 脚本返回函数结构而不是 Google Apps 脚本中的值,在外部工作正常吗?

    我正在设置一个谷歌电子表格项目来连接到我的 CryptoExchange API 但是当涉及到这个简单的 CryptoJs Hmac sha256 脚本时 它不起作用 它返回函数结构而不是值 而在外部它工作正常 看我的jsfiddle ht
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • ArrayFormula 破坏了 getLastRow() 函数。可能的解决方法?

    在我的电子表格中 我有一个正在运行的脚本 它使用getLastRow 功能是其逻辑的重要组成部分 自从我在其中一列中应用数组公式以来 getLastRow 功能无法正常工作 即使其他列中没有其他值 数组公式似乎也一直 应用 到工作表的底部

随机推荐