当前位置: 首页 > 知识库问答 >
问题:

Google电子表格API:单元格中的注释

狄飞尘
2023-03-14

我做了一个PHP脚本,使用api v4将一些信息导出到谷歌电子表格。当我尝试向单元格中添加注释时,我应该为每个注释向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++;
    }

}

在这种方法中,注释是一个接一个地添加的(使用循环),并且工作正常。主要的问题是,我做的请求和notes一样多,而谷歌的Cuota有限。(每100秒每个用户有100个写入请求)。我需要优化请求的数量,我只需要发出一个请求,在同一行的不同单元格中添加不同的注释。阅读google电子表格文档,我可以看到请求中的“note”节点正在请求字符串值:

  "note": string,

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#updatecellsrequesthttps://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/sheets#RowDatahttps://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellData

如何在不同的单行单元格中添加不同的注释,而不需要发出这么多请求?

共有1个答案

黄德明
2023-03-14

如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

 类似资料:
  • 问题内容: Gdata提供了一种基于时间戳仅从Google电子表格中获取更改的单元格的方法。如何为Gdata调用创建时间戳? 即“将仅返回发布时间等于或晚于指定时间戳记的条目。” setPublishedMax()https://developers.google.com/gdata/javadoc/com/google/gdata/client/Query#setPublishedMax (co

  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 我有一个谷歌电子表格,里面有多张表格,我想把每一张表格复制到一个新的电子表格中,并在一个特定的单元格中以文本命名新的电子表格。我很高兴运行脚本多次,所以我想让它复制活动表。 即。我所拥有的=称为“颜色”的电子表格——工作表1=“红色”,工作表2=“蓝色”,工作表3=“黄色”,等等。 我想要什么= 名为“红色”的电子表格。电子表格叫做"蓝色",电子表格叫做"黄色" 到目前为止,我有这个脚本,但它告诉

  • 我们使用Google Sheet API v4。我们希望用空数据清除整个工作表。我们不想删除行/列。 UpdateCells调用不起作用(通过API删除列):开发人员。谷歌。com 工作UpdateCells调用(所有单元格):开发人员。谷歌。com

  • 我很抱歉,如果这是一个明显的问题,我仍然是相当新的API。我正在使用python drive api库,并试图将google电子表格下载为CSV。 当我使用files.get时,它会吐出一个没有downloadUrl的文件,在导出链接字段中也没有“text/csv”键。 如果不可能,我可以找到解决方案,但我希望是这样,因为可以手动完成(file->download_as->csv) 我需要使用go

  • 我很难找到将多张工作表同步到主电子表格的方法。在我的测试中,我有一个大的电子表格,上面有5个城市的地址。我正在尝试为每个城市创建一个电子表格,并能够在任何一个表格中更改数据时同步数据。因此,我将管理总体数据,5张电子表格中的每一张都将分配给其他人。这样,他们就可以在不访问所有数据的情况下更新工作表。使用内置查询或导入功能的问题是,如果用户在“城市”电子表格上进行更改,它将破坏该表格,因为数据被引用