我制作了一个php脚本,以使用api v4将一些信息导出到Google电子表格。当我尝试将注释添加到单元格中时,我应该针对每个注释向API发出请求,这对我来说是个问题,如前所述。
我当前的方法是以下方法,我试图在一行的每一列上添加注释($ headerNotes是一个数组):
public function writeHeaderNotes($headerNotes, $spreadsheetId, $sheetId, $row)
{
$client = $this->getClient();
$service = new Google_Service_Sheets($client);
$cellstart = 0;
$cellend = 1;
foreach ($headerNotes as $note)
{
$body = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
'requests' => array(
'updateCells' => array(
'rows' => array(
'values' => array(
'note' => $note)),
'fields' => 'note',
'range' => array(
'sheetId' => $sheetId,
'startRowIndex' => $row-1,
'endRowIndex' => $row,
'startColumnIndex' => $cellstart,
'endColumnIndex' => $cellend)))
));
$service->spreadsheets->batchUpdate($spreadsheetId, $body);
$cellstart++;
$cellend++;
}
}
在这种方法中,笔记(使用循环)被一个接一个地添加,并且工作正常。主要问题是我正在做与笔记一样多的请求,而google的内容有限。 (每100秒每用户100个写入请求)。我需要优化请求的数量,我只需要发出一个请求即可在同一行的不同单元格中添加不同的注释。阅读google电子表格文档,我可以看到请求中的“ note”节点正在请求字符串值:
"note": string,
https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#updatecellsrequest https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/sheets#RowData https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellData
我如何在不需太多请求的情况下向不同的单行单元格添加不同的音符?
答案 0 :(得分:1)
如文档中针对RowData对象[1]所述,values
字段是一个数组,其中每个值(CellData对象)是要在每个单元格中插入的值。您还需要使用一个范围,该范围可以覆盖要在每行中插入的所有值。我修改并测试了您的代码,以便在第一行的前5列中插入注释,并成功运行:
$client = getClient();
$service = new Google_Service_Sheets($client);
$cellstart = 0;
$cellend = 5;
$note = "whatever";
$row = 1;
$body = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
'requests' => array(
'updateCells' => array(
'rows' => array(
'values' => array(
array('note' => $note),
array('note' => $note),
array('note' => $note),
array('note' => $note),
array('note' => $note)
)
),
'fields' => 'note',
'range' => array(
'sheetId' => $sheetId,
'startRowIndex' => $row-1,
'endRowIndex' => $row,
'startColumnIndex' => $cellstart,
'endColumnIndex' => $cellend
)
)
)
));
$service->spreadsheets->batchUpdate($spreadsheetId, $body)
[1] https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/sheets#RowData