【问题标题】:ScriptError using Google Apps Script Execution API使用 Google Apps 脚本执行 API 的 ScriptError
【发布时间】:2016-06-12 17:48:42
【问题描述】:

按照这些指南 https://developers.google.com/apps-script/guides/rest/quickstart/target-scripthttps://developers.google.com/apps-script/guides/rest/quickstart/nodejs,我正在尝试使用节点中的执行 API 来返回 Google 电子表格中的一些数据。

我已将脚本 ID 设置为 Apps 脚本文件的项目键。我还验证了在脚本编辑器中运行该函数是否成功。

但是,当使用节点在本地运行脚本时,我收到此错误:

The API returned an error: Error: ScriptError

我还确保该脚本与我用来通过 Google API 进行身份验证的项目相关联。

有没有人对我可以做些什么来调试/修复这个问题有任何建议?这个错误太笼统了,我不知道该去哪里找。

更新:我在这个 JSBin 中包含了代码的副本(year 函数是入口点) https://jsbin.com/zanefitasi/edit?js

更新 2:错误似乎是由包含此行引起的 var spreadsheet = SpreadsheetApp.open(DriveApp.getFileById(docID));

【问题讨论】:

  • 即使错误是一般性的,请提供您的代码。我们不是千里眼。
  • @dasjanik 我正在考虑更多地调试它,但我已经更新了问题以将 JSBin 包含到代码副本中

标签: node.js google-apps-script google-apps-script-api


【解决方案1】:

看来我没有要求正确的范围。 nodejs 示例包含'https://www.googleapis.com/auth/drive',但我还需要在SCOPES 数组中包含'https://www.googleapis.com/auth/spreadsheets'。似乎错误消息ScriptError 在这里信息量不是很大。

为了找到您需要的范围,请转到脚本编辑器 > 文件 > 项目属性 > 范围。请记住删除旧凭据 ~/.credentials/old-credential.json,以便脚本请求新凭据。

【讨论】:

  • 如您所说,即使在更新范围时,它仍然不会在不实际删除凭据的情况下重新授权自己。
  • 刚刚遇到这个问题,你的帖子解决了我的问题。谢谢!
【解决方案2】:

编辑:随着信息的更新,我仔细查看并看到您返回的是非基本类型。具体来说,您要返回一个工作表对象。

Apps Script 中的基本类型类似于 JavaScript:字符串、数组、对象、数字和布尔值。这 Execution API 只能取和返回这些对应的值 基本类型——更复杂的 Apps 脚本对象(如 Document 或 Sheet) 无法通过 API 传递。

https://developers.google.com/apps-script/guides/rest/api

在您的帐户“班级”中

this.report = spreadsheet.getSheetByName(data.reportSheet);

旧答案:

'data.business_exp' 在这种情况下将为空。您需要从某处加载数据。每次调用脚本时,都会创建一个新的脚本实例。在执行链结束时,它将被销毁。作为全局对象存储的任何数据都将丢失。您需要将该数据保存到永久位置,例如脚本/用户属性,并在每次脚本执行时重新加载。

https://developers.google.com/apps-script/reference/properties/

【讨论】:

  • 我在year之前的同一个文件中定义了数据。那样不行吗?
  • 是的,如果“数据”是“静态”定义的,那么“年份”将有权访问“数据”对象。您没有在 jsbin 示例中显示这一点。 'error: Error: ScriptError' 表示脚本本身存在错误。
  • 我已经更新了 jsbin 以包含 data 的样子。我不确定脚本中会有什么错误,因为在本地运行 year 函数有效。
  • 我没有在year函数中返回business_exp,而是返回business_exp.months,但仍然得到ScriptError。我想如果我只是返回this.months,这是一个数组,它不会是一个非基本类型?
  • 看看 node.js 的例子:developers.google.com/apps-script/guides/rest/quickstart/nodejs。它显示了当返回错误时他们如何转储整个堆栈跟踪。
猜你喜欢
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2013-10-10
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多