附加到 Google 工作表 API V4 时收到无效的 JSON 有效载荷

Invalid JSON payload received when appending to Google Sheets API V4

您好,我有一个小工具可以使用 API v4 编辑 Google Sheet。我可以从 sheet 中读取数据,但我无法附加任何内容。

               $.ajax({
                    url: 'https://sheets.googleapis.com/v4/spreadsheets/' +
                        'SPREADSHEETID' +
                        '/values/' + 'TAB' +
                        '?alt=json&key=KEY',
                    type: 'POST',
                    data: {
                        majorDimension: 'ROWS',
                        range: 'A1:A2',
                        values: '32'
                    },
                    dataType: 'jsonp',
                    success: function (data) {
                        console.log(data);
                    }
                });

这是我正在使用的代码,但我不断收到以下错误:Invalid JSON payload received. Unknown name \"values\": Cannot bind query parameter. Field 'values' could not be found in request message."

我相信你的目标如下。

  • 您想使用 Sheets API 和 ajax 的 spreadsheets.values.update 方法将值放入 Spreadsheet。

修改点:

  • spreadsheets.values.update的方法使用了PUT方法。在您的脚本中,您似乎正在尝试使用 POST 方法。
  • 不幸的是,在当前阶段,当使用PUT和POST方法时,无法使用API键请求这些方法。在这种情况下,请使用访问令牌。
  • 在spreadsheets.values.update的方法中,请将请求体发送为字符串类型。并且,内容类型是 application/json.
  • 并且,该值为二维数组。

当这些点体现在你的脚本中,就变成了下面这样。

修改后的脚本:

$.ajax({
  url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED',
  method: 'PUT',
  data: JSON.stringify({majorDimension: 'ROWS', values: [['32']]}),
  headers: {
    "Authorization": "Bearer ###your access token###",
    "Content-Type": "application/json"
  },
  success: function (data) {
    console.log(data);
  },
  error: function (res) {
    console.log(res.responseText);
  }
});
  • 当您使用 A1 作为范围时,该值将放在第一个选项卡中。当您要将值设置为特定的 sheet 时,例如,请使用 Sheet2!A1。请注意这一点。

  • 顺便说一下,从Invalid JSON payload received when appending to Google Sheets API V4appending to Google Sheets开始,如果你想把"32"的值附加到Spreadsheet,请修改上面的脚本如下。 spreadsheets.values.append的方法参考是here.

    • 来自

        url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED',
        method: 'PUT',
      
    •   url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/###SheetName###:append?valueInputOption=USER_ENTERED',
        method: 'POST',
      

参考: