【问题标题】:Trying to append a row to a Google Spreadsheet in PHP尝试在 PHP 中向 Google 电子表格追加一行
【发布时间】:2016-10-27 19:23:17
【问题描述】:

我正在通过 Composer (https://packagist.org/packages/google/apiclient) 使用 Google 的客户端 API,并且我已成功通过身份验证并收到了访问令牌。

我正在尝试向驱动器中的 Google 工作表添加一行,但我找不到任何专门针对 PHP 的相关文档。

这是我目前所得到的:

$service = new Google_Service_Sheets($a4e->google); // my authenticated Google client object
$spreadsheetId = "11I1xNv8cHzBGE7uuZtB9fQzbgrz4z7lIaEADfta60nc";
$range = "Sheet1!A1:E";
$valueRange= new Google_Service_Sheets_ValueRange();
$service->spreadsheets_values->update($spreadsheetId,$range,$valueRange);

这会返回以下错误:

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "code": 400, "message": "Invalid valueInputOption: INPUT_VALUE_OPTION_UNSPECIFIED", "errors": [ { "message": "Invalid valueInputOption: INPUT_VALUE_OPTION_UNSPECIFIED", "domain": "global", "reason": "badRequest" } ], "status": "INVALID_ARGUMENT" } } ' in /usr/share/nginx/vendor/google/apiclient/src/Google/Http/REST.php

我不知道“Google_Service_Sheets_ValueRange()”对象的格式,以及如何在工作表末尾追加一行,而不是必须指定特定范围。

对于这个问题的任何帮助,我将不胜感激。

【问题讨论】:

    标签: php google-sheets google-api-php-client


    【解决方案1】:

    有一个新的追加方法: (我使用的是服务帐号。)

    $client = new Google_Client();
    $client->useApplicationDefaultCredentials();
    $client->setSubject($delegated_user);
    $client->addScope(Google_Service_Sheets::SPREADSHEETS);
    $service = new Google_Service_Sheets($client);
    $range = 'Sheet1!A:E';
    $values = [
        ["a", "b", "C", "D", "E"]
    ];
    $body = new Google_Service_Sheets_ValueRange([
        'values' => $values
    ]);
    $params = [
        'valueInputOption' => "RAW"
    ];
    $result = $service->spreadsheets_values->append($spreadsheet_id, $range, $body, $params);
    

    【讨论】:

      【解决方案2】:
      $client = $this->getClient();
      
      $service = new Google_Service_Sheets($client);
      
      $spreadsheetId = '1bFh8FYeez6c1snPCHZF_olsHOLRqEENJbChLKbE9xg0';
      
      $range = 'A1:S1';
      
      $values = [
          ['col 1', 'col 2', 'col 3'],
          ['col 1', 'col 2', 'col 3'],
          ['col 1', 'col 2', 'col 3']
      ];
      
      $requestBody = new Google_Service_Sheets_ValueRange(array(
          'values' => $values
      ));
      
      $params = [
          'valueInputOption' => 'RAW'
      ];
      
      print_r($requestBody);
      
      $response = $service->spreadsheets_values->update($spreadsheetId, $range, $requestBody, $params);
      

      【讨论】:

        【解决方案3】:

        我也遇到了同样的问题,没有相关文档。但我找到了解决方案。这是一个工作示例:

        // ...
        
        // Create the value range Object
        $valueRange= new Google_Service_Sheets_ValueRange();
        
        // You need to specify the values you insert
        $valueRange->setValues(["values" => ["a", "b"]]); // Add two values
        
        // Then you need to add some configuration
        $conf = ["valueInputOption" => "RAW"];
        
        // Update the spreadsheet
        $service->spreadsheets_values->update($spreadsheetId, $range, $valueRange, $conf);
        

        我认为这是一种奇怪的语法,我没有找到关于它的明确文档,我只是尝试了一些组合,现在它可以工作了!不确定这是正确的方法,希望它可以帮助。

        【讨论】:

        • 仅供参考,我们刚刚在文档中为此添加了一个小示例:developers.google.com/sheets/guides/…
        • @EricKoleda 嘿,Eric,文档怎么了?它完全不存在。没有解释或例子。构造函数、方法和属性也没有列出?发生了什么?
        • 什么意思?特定于 PHP 的参考文档在这里:developers.google.com/resources/api-libraries/documentation/…
        • 我可能会问,更新方法不是覆盖范围而不是为其插入行吗?如果不使用“append”方法,我似乎无法插入行,该方法有其自身的一组问题。
        • @EricKoleda 嘿,Eric,这些是API 参考,而不是代码示例。过去 Google 为 API 提供了大量的 PHP 代码示例,但最近,PHP 显然是事后才想到的。
        猜你喜欢
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        相关资源
        最近更新 更多