【问题标题】:Sheets JavaScript API Uncaught Error表格 JavaScript API 未捕获的错误
【发布时间】:2017-04-03 22:48:34
【问题描述】:

我正在我的 Aurelia 应用程序中使用新版本的 Google Sheets API(我使用的是 TypeScript)。我已成功登录用户并询问所需的范围,但是当我尝试获取电子表格的值时,API 会引发以下错误:

cb=gapi.loaded_0:269 未捕获错误:arrayForEach 被调用时使用了一个非数组值(…)

这是我初始化 API 和登录用户的方式:

gapi.load("auth2", () => {
    gapi.auth2.init({
       'client_id': this.clientId,
       'scope': this.scopes.join(' ')
    }).then(() => {
           this.auth = gapi.auth2.getAuthInstance();
           this.auth.signIn().then(response => {
               gapi.load("client", () => {
                     gapi.client.load("sheets", "v4", () => {
                         gapi.client.sheets.spreadsheets.values.get({
                             spreadsheetId: this.testSheet,
                             range: 'Class Data!A2:E'
                          }).then((response) => {console.log(response);});
                     });
               });
           })
    });
});

scopes 变量是一个范围数组:

scopes: string[] = ["https://www.googleapis.com/auth/spreadsheets.readonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/drive"]

用户登录成功,我什至可以得到他们的姓名和电子邮件。加载 Sheets API 后,我检查了“gapi.client”并且“sheets”对象在那里,但是当我尝试从电子表格中获取数据时,它失败并出现上述错误。我正在运行的示例是针对 this 示例中使用的 Google 的公共电子表格。另请注意,我的客户端 ID 没有任何问题,因为我已经使用它运行了 Google 的示例代码并且它运行良好。

【问题讨论】:

    标签: javascript typescript aurelia google-sheets-api google-api-js-client


    【解决方案1】:

    您的工作表是否命名为 Class Data?如果是,可能需要指定范围如下:

    range: "'Class Data'!A2:E"
    

    在 Sheets UI 和 Apps 脚本中确实如此,我正在努力记住我是否在 JS 客户端库中遇到过同样的情况。

    【讨论】:

    • 试过了。。没用。我直接从 Google 的示例中复制了 range 的值,但它似乎仍然无法正常工作......
    • 是的,我现在已经尝试了该示例,并且该示例确实可以正常工作,所以这不是问题...关于您的范围的两个问题:您请求只读和完全访问驱动器和表格,您肯定只需要请求一个或其他(只读或非只读),具体取决于您是否要授予写访问权限?其次,是否启用了 Drive API?
    • Drive API 未启用,只有 Sheets API 启用。我现在启用它,但错误仍然存​​在。我尝试仅使用只读范围运行代码。我包括了所有可用的范围,只是为了确保错误与它们无关
    【解决方案2】:

    我尝试使用 gapi,但最终遇到了同样的错误,让我遇到了这个问题。

    因为我使用启用了“Web 实时预览”的 Visual Studio 2019,它会覆盖多个原型方法,其中之一是 Array.prototype.forEach。

    我在“工具>选项>网络实时预览”中禁用了“网络实时预览”,它起作用了。

    Tools>Options>Web live preview

    我知道这个案例是 Visual Studio 特有的,但是覆盖问题可能会给遇到这个问题的人一些指导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多