有没有一种方法可以从PostgreSQL或Bash执行Google Apps脚本?

时间:2019-02-19 01:29:36

标签: postgresql google-apps-script google-sheets

我有数百个Google电子表格,它们都具有相同的脚本。我想通过PostgreSQL或Bash中的ID执行特定的Google电子表格。有执行脚本的简便方法吗?我宁愿不必学习python。

例如,我的电子表格ID为1HGo8V-P5S-z4oCUiAKULrkZRFlzRHEalJqUFLiP,并且我想通过Bash或Postgresql执行函数Refresh()

API是唯一的途径吗? https://developers.google.com/apps-script/api/how-tos/execute

到目前为止,我的考虑是创建一个python可执行文件并从postgresql函数执行它。 https://developers.google.com/apps-script/api/quickstart/python

编辑::如果我想执行任何应用程序脚本,则每个电子表格都需要一个Google项目(手动创建)。必须有一种更简单的方法来执行此操作,为每个电子表格手动创建项目都没有意义。

参考:https://developers.google.com/apps-script/api/how-tos/execute

  

被调用的脚本和调用的应用程序必须共享一个云   平台项目。

解决方案: @Tanaike

最终使我可以使用部署Web应用程序

1 个答案:

答案 0 :(得分:1)

  • 您要执行电子表格的容器绑定脚本。
  • 您要从本地PC或Google外部执行脚本。
  • 您要从电子表格ID中执行脚本。

如果我的理解正确,那么这个答案如何?

检索容器绑定脚本的项目ID:

我认为这是您遇到的难题。在当前阶段,还没有方法可以从父级Google文档(在本例中为Spreadsheet)中检索容器绑定脚本的项目ID。

  • 已在https://issuetracker.google.com/issues/111149037上将其报告为功能请求。但不幸的是,这尚未实现。
  • 通过这种方式,需要手动检索项目ID。
  • 例如,您可以在Developer Hub上检索项目ID。
    • 选择项目后,您可以在https://script.google.com/home/projects/### projectId ###的URL上看到项目ID。

在上述情况下,需要从要运行脚本的每个电子表格中手动检索项目ID。抱歉,无法找到这种情况的解决方法。

执行脚本:

我认为执行脚本有两种模式。您可以从2种模式中进行选择。

1。使用Apps Script API中的scripts.run方法

  • 您的问题中也提到了这一点。
  • 脚本中的功能是使用API​​执行的。
  • 您只需要在本地创建python脚本。
  • 在这种情况下,在本地需要OAuth2进程检索的访问令牌。

我认为在这种模式下,脚本可以很简单。

2。使用网络应用

  • 通过访问Web Apps,脚本中的功能得以执行。
    • 在这种情况下,由于您所处的电子表格数量众多,因此在执行脚本时,它会使用Apps Script API中的scripts.run。当用户访问Web Apps时,电子表格的脚本由Web Apps的脚本执行。由于使用了Google Apps脚本,因此可以轻松检索访问令牌。
  • 您需要创建一个python脚本来访问本地端的Web Apps,并创建一个Google端脚本(Web Apps)中的Google Apps脚本。
  • 在这种情况下,您可以在本地端运行带有或不带有访问令牌的脚本。

我认为在这种模式下,访问方法可能很简单。

参考:

如果这不是您想要的,我表示歉意。

编辑:

通过讨论,我认为对于您的脚本Refresh(),以下流程是合适的。 1.使用Refresh()脚本(如API)部署Web Apps。 2.使用python脚本和curl调用API。     这样,将运行Web Apps脚本,并且您可以反映所有电子表格的Refresh()的结果。

示例脚本:

function doGet() {
  var spreadsheets = ["spreadsheetId1", "spreadsheetId2",,,]; // Please set spreadsheet ID here.
  for (var i = 0; i < spreadsheets.length; i++) {
    SpreadsheetApp.openById(spreadsheets[i])
      .getSheetByName("Sheet1") // If you want to also put values to other sheet, please modify this.
      .getRange(1, 1)
      .setValue(new Date());
  }
  return ContentService.createTextOutput("Done.");
}
  • 部署Web Apps后,将打开授权屏幕。但是此授权只有一次。

部署Web应用程序:

在请求使用Web Apps之前,请先部署Web Apps。

  • 在脚本编辑器上
  • 发布->部署为Web App
    1. 创建新的项目版本
    2. 在“执行应用”上,选择“我”
    3. 在“有权访问该应用的用户”中,选择“任何人,甚至是匿名用户”
    4. 点击“部署”
    5. 复制“当前的Web应用程序URL”
    6. 点击“确定”

卷曲示例:

如果使用curl命令,请按以下方式使用。

$ curl -L "https://script.google.com/macros/s/#####/exec"

注意:

  • 修改脚本后,请重新部署Web Apps作为新版本。这样,最新的脚本就会反映到Web Apps。这很重要。

注意:

  • 您还可以使用电子表格ID进行请求,也可以直接将其包含在Web Apps中。 (在示例脚本中,使用了后者。)
    • 如果要使用电子表格ID进行请求,请小心。 Web Apps的工作者人数必须少于30。Ref