在PHP中尝试向Google电子表格添加一行数据

11

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

我正在尝试向我的驱动器中的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()"对象的格式方面遇到了困难,并且不知道如何将一行添加到表格的末尾,而不必指定特定的范围。

我非常感谢任何关于这个问题的帮助。

3个回答

23

我曾经遇到过同样的问题,对于这个问题缺少相应的文档。但是我找到了解决方案。下面是一个可行的示例:

// ...

// 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);

我认为这是一种奇怪的语法,而且我没有找到清晰的文档说明,只是尝试了一些组合,现在它能用了!不确定这是否是正确的方式,希望能有所帮助。


5
了解,我们刚刚在文档中添加了一个小样例,您可以前往以下链接查看:https://developers.google.com/sheets/guides/values#writing_to_a_single_range - Eric Koleda
@EricKoleda 嘿Eric,文档怎么了?它完全不存在。没有解释或示例。构造函数,方法和属性也没有列出来?发生了什么? - Walter M
你是什么意思?PHP特定的参考文档在这里:https://developers.google.com/resources/api-libraries/documentation/sheets/v4/php/latest/ - Eric Koleda
我可以问一下,update方法不是覆盖范围而不是插入行吗?我似乎无法在不使用“append”方法的情况下插入行,但这种方法又有其自身的问题。 - Bigbob556677
2
@EricKoleda 嘿,Eric,那些是API参考文档,而不是代码示例。过去,Google为API提供了大量的PHP代码示例,但最近,PHP显然是一个次要考虑因素。 - cloudxix

14

现在有一个新的添加方法: (我正在使用服务账户。)

$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);

你不需要添加范围A:E,因为它会填充列中的数据。我认为你的答案是正确的。 - Guilherme Sampaio

0
$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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接