【问题标题】:Write to Sheet with Google Sheets API使用 Google Sheets API 写入工作表
【发布时间】:2017-07-29 01:33:17
【问题描述】:

我想将数据写入我的工作表:

$spreadsheetId = 'xxx';
$range = 'Test!A1:D5';

$values = [
  'range' => "A1",
  'majorDimension' => 'DIMENSION_UNSPECIFIED',
  'values' => [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "30/20/2016"],
  ],
];

$body = new Google_Service_Sheets_ValueRange(array(
  'values' => $values
));
$params = array(
  'valueInputOption' => 'RAW'
);
$result = $service->spreadsheets_values->update($spreadsheetId, $range, $body, $params);

但在日志中我看到:

PHP Fatal error:  Uncaught exception 'Google_Service_Exception' with message '{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"range\" at 'data.values': Cannot find field.\nInvalid JSON payload received. Unknown name \"major_dimension\" at 'data.values': Cannot find field.",
    "errors": [
      {
        "message": "Invalid JSON payload received. Unknown name \"range\" at 'data.values': Cannot find field.\nInvalid JSON payload received. Unknown name \"major_dimension\" at 'data.values': Cannot find field.",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }
}

我做错了什么?我将感谢适用于您的示例代码:)

在示例中没有足够的信息(https://developers.google.com/sheets/api/guides/values#writing_to_a_single_range)

【问题讨论】:

标签: php google-spreadsheet-api


【解决方案1】:

你快到了。不要忘记包含工作表名称

 "range": "Sheet1!A1:D5"

查看Basic Writing guide 获取更多示例。

【讨论】:

  • 同样的结果 :-(
  • 我只熟悉JS实现。但是官方的 PHP 实现是 here 用于在单元格上书写。
【解决方案2】:

试试这个:

$spreadsheetId = 'xxx';
$range = 'Test!A1:D5';

$values = [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "30/20/2016"],
];

$updateBody = new Google_Service_Sheets_ValueRange([
    'range' => $range,
    'majorDimension' => 'ROWS',
    'values' => $values,
]);

$valueInputOption = 'USER_ENTERED'; // Or RAW       

$params = [
  'valueInputOption' => $valueInputOption
];

$result = $this->sheetsService->spreadsheets_values->update(
    $spreadsheetID,
    $updateRange,
    $updateBody,
    $params
); 

【讨论】:

  • 必须设置 $updateRange = $range = 'Test!A1:D5' 才能让它工作
【解决方案3】:

这里不是这样,但我通过从 values 数组内的项目中删除 NULL 值解决了类似的问题。

Google 的 PHP 库似乎很难解析这些值并最终生成无效的 JSON 有效负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    相关资源
    最近更新 更多