Google 张 API 范围问题

Google sheets API range issue

我有一个这样的googlesheet。这些值目前只是我 headers

的占位符

当我 运行 我的 PHP 脚本 $range = 'Sheet!F2:L2';通过 API/service 帐户将记录插入 google sheet 并且我只想在 ROW F 开始插入所有尝试,它在第一次尝试时插入正常,但随后的所有插入然后插入到第 3 行及以后,插入从第 1/A 列开始的数据?

只有当我将范围设置为 F3:L3 并将第 2 行留空时,它才会同时插入到正确的列中吗?

代码:

require '/var/www/html/app/vendor/autoload.php';
$client = new \Google_Client();
$client->setApplicationName('My PHP App');
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
$client->setAuthConfig('/var/www/html/clients-api/credentials.json');
$sheets = new \Google_Service_Sheets($client);
$spreadsheetId = '1bo123c1UtdWKV25_312znDO123dDp631238D5qN1123lQ';
$range = 'Sheet1!F2:L2';
$values = [
    [$data->FirstName,$data->LastName,$data->ID,"","",$data->PrimaryNumber,$data->PrimaryEmail]
];
$body = new Google_Service_Sheets_ValueRange([
    'range' => $range,
    'values' => $values
]);
$params = [
    'insertDataOption' => 'INSERT_ROWS',
    'valueInputOption' => "RAW"
];
$result = $sheets->spreadsheets_values->append($spreadsheetId, $range, $body, $params);

echo '<pre>', var_export($result, true), '</pre>', "\n";

问题:

如你所见in the official docs:

The input range is used to search for existing data and find a "table" within that range.

数据将相应地附加在这个“table”之后,从它的第一列开始。

在这种情况下,第一次附加数据时,F2:L2 不属于任何现有的 table,因为所有这些单元格都是空的。

连续时间的情况并非如此,其中 F2:L2 已经填充,被认为是包含第一行中的 headers 的 table 的一部分,因为那里F2:L2A1:L1 之间没有空白单元格。找到的 table,然后,当尝试向 F3:L3 添加数据时,对应于 A1:L2。因此它从 A 列开始追加数据,因为那是 table 开始的地方。

您可以通过检查 API response 中的 tableRange 来检查情况是否如此。在您的情况下,当尝试附加 F3:L3 时,它将类似于 "tableRange": "Sheet1!A1:L2".

解决方案:

  • 一个选项是使输入范围从头开始引用第 1 行(例如 A1),当附加 F2:L2 时,并在数组的开头添加空值 values:
$range = 'Sheet1!A1';
$values = [
    ["","","","","",$data->FirstName,$data->LastName,$data->ID,"","",$data->PrimaryNumber,$data->PrimaryEmail]
];
  • 另一种方法是每次都更新输入范围,以指定不属于“table”的范围(也就是说,连续F2:L2F3:L3F4:L4 等)。

参考: