【问题标题】:Accessing google sheet from another google sheet using app script api使用应用脚本 api 从另一个谷歌表访问谷歌表
【发布时间】:2021-06-10 21:56:18
【问题描述】:

这是一个谷歌表格和应用脚本问题。我想做的是有两张表,其中一张我将调用客户端表,另一张我将调用服务器表。这些工作表中的每一个都有一个绑定的应用程序脚本。

服务器工作表的绑定应用脚本将部署为网络应用,以“用户访问网络应用”的身份执行,并设置为“任何拥有 Google 帐户的人”均可访问。

客户表将作为查看者与多个不同的用户共享,以便他们可以制作自己的副本。

每个用户都可以修改他们的客户表实例。然后,每个客户端表中的绑定脚本应用程序将调用绑定到服务器电子表格的 Web 应用程序,并向其传递一些数据。 Web 应用程序将访问它的电子表格,进行一些处理并将结果返回给调用脚本,调用脚本将使用结果修改它的客户端工作表。

这里的目的是对用户隐藏服务器工作表和脚本的逻辑。作为“用户访问 Web 应用程序”执行的原因是为了使用用户的 api 限制,因为如果服务器应用程序脚本作为“我”执行,那么如果有大量处理正在进行,这些限制可能会很快超出。

我在尝试从绑定到 Google 表格的应用脚本调用网络应用时遇到了授权问题(响应 401)。另外,我不确定如果以用户身份执行 Web 应用脚本是否能够访问它的电子表格。

有没有办法使用谷歌表格和容器绑定脚本来做到这一点?或者有没有更好的方法来创建这个设置?

【问题讨论】:

  • 很遗憾,我无法理解您当前的问题。我为我糟糕的英语水平道歉。可以问一下具体情况吗?

标签: google-apps-script google-sheets


【解决方案1】:

“像我一样执行”是没有办法的

如果您使用“用户访问网络应用程序”,那么通过扩展,他们将需要访问“服务器”表。这是因为脚本代表用户执行。因此,如果用户无权访问工作表,则脚本也无权访问。

作为“服务器”,如果您想限制调用者的访问权限,确实没有办法让服务器完成“工作”。

小例子

“服务器”脚本

function doGet() {
  return ContentService.createTextOutput("hello world!");
}

部署为“以我身份执行”“拥有 Google 帐户的任何人”

“客户端”脚本

function myFunction() {
  let webappURL = '[YOUR_DEPLOYMENT_URL]'
  let response = UrlFetchApp.fetch(webappURL)
  Logger.log(response.getContentText())
}

它的输出是hello world!

配额

检查配额页面:

https://developers.google.com/apps-script/guides/services/quotas

您的网络应用似乎没有接听电话和阅读电子表格的限制。但同时处决有一个限制,即 30,尽管有些人报告说它略低于这个数字。

另一种选择:将数据发布到网络

如果您只需要访问数据,那么您可以将电子表格数据发布为 .csv 文件,然后您的客户可以使用该文件进行调用:

function getData() {
  let sheetURL = '[LINK_GENERATED_BY_PUBLISH_DIALOG]'
  let response = UrlFetchApp.fetch(sheetURL)
  Logger.log(response.getContentText())
}

如果服务器表有这些值:

响应将是:

参考文献

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2021-12-04
    • 2011-05-29
    • 2013-05-31
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多