电子表格副本中的Google脚本无法执行

时间:2018-10-18 19:24:13

标签: google-apps-script google-sheets google-api-python-client

我有一个主电子表格,其中包含一个脚本,该脚本使用当前电子表格ID向服务器onEdit发出POST请求。

function post2Server(){
  ss = SpreadsheetApp.getActiveSpreadsheet();

  payload                   = {};
  payload['spreadsheet_id'] = ss.getId();

  headers = {
    'Content-Type': 'application/json',
    'Accept'      : 'application/json'
  }

  options = {
    'method'     : 'post',
    'contentType': 'application/json',
    'headers' : headers,
    'payload' : JSON.stringify(payload)
  }

  res = UrlFetchApp.fetch(MY_SERVER_URL, options);
  return;
}

此功能按原版要求工作。现在,当我使用python google API创建此主表的副本时,脚本将复制过来,但是不会运行。我说错了......

  

发生服务器错误。请尝试再次保存项目。

为什么它不运行?在电子表格的副本中,我什至创建了一个新函数,该函数仅记录“ hello”并收到相同的错误。似乎在Python SDK复制了主表之后,没有任何函数运行。这是权限问题吗?如何使脚本在母版的任何后续副本中执行?

2 个答案:

答案 0 :(得分:0)

通常,我对这种要求的处理方法是使用scripts.run中的Google Apps Script REST API方法。这样,您可以完全控制要执行的脚本和参数。

使用此方法必须满足的主要条件如下:

  • 将脚本项目部署为API可执行文件
  • 为执行提供适当范围的OAuth令牌
  • 确保脚本和调用应用程序共享一个公共的Cloud Platform项目

如果您需要更多详细信息,请参阅文档中的dedicated page,其中介绍了如何运行您的Apps脚本的特定方法,并且在其底部,您可以使用许多不同语言的a sample,包括python。

答案 1 :(得分:0)

现在,使用通过Google服务帐户进行身份验证的Drive API复制包含绑定的Google App脚本的工作表,由于Drive API中的错误(提交here),该脚本将始终无法使用。在此问题解决之前,没有简单的解决方案。

在我们的案例中,我们能够通过使用Sheets中的函数(特别是IMPORTDATA函数作为发送Web请求的一种方法)来消除对绑定脚本的使用。