按照这些指南 https://developers.google.com/apps-script/guides/rest/quickstart/target-script 和 https://developers.google.com/apps-script/guides/rest/quickstart/nodejs,我正在尝试使用节点中的执行API来返回Google电子表格中的一些数据。
我已将脚本 ID 设置为应用程序脚本文件的项目密钥。我还验证了在脚本编辑器中运行该函数是否成功。
但是,当使用 node 在本地运行脚本时,我收到此错误:
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));
似乎我没有请求正确的范围。nodejs 示例包含 'https://www.googleapis.com/auth/drive'
,但我还需要在 SCOPES
数组中包含'https://www.googleapis.com/auth/spreadsheets'
。似乎错误消息ScriptError
在这里不是很有信息。
为了找到所需的范围,请转到"脚本编辑器">"文件">"项目属性">"范围"。请记住删除旧凭据~/.credentials/old-credential.json
以便脚本将请求新凭据。
编辑:随着信息的更新,我仔细观察了一下,看到您正在返回一个非基本类型。具体来说,您要返回一个工作表对象。
应用程序脚本中的基本类型类似于 JavaScript:字符串、数组、对象、数字和布尔值。这 执行 API 只能获取并返回与这些对应的值 基本类型 -- 更复杂的应用程序脚本对象(如文档或 表)不能由 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/