使用Google Sheets API(PHP)更改单元格颜色

使用Google Sheets API(PHP)更改单元格颜色,php,google-sheets-api,Php,Google Sheets Api,我正试图通过PHP中的GoogleSheetsAPI更改一个范围颜色 我做了大约一个小时的研究。下面的代码是我所掌握的 $requests = [ // Change the spreadsheet's title. new Google_Service_Sheets_Request([ 'updateSpreadsheetProperties' => [ 'properties' => [

我正试图通过PHP中的GoogleSheetsAPI更改一个范围颜色

我做了大约一个小时的研究。下面的代码是我所掌握的

$requests = [
      // Change the spreadsheet's title.
      new Google_Service_Sheets_Request([
          'updateSpreadsheetProperties' => [
              'properties' => [
                  'title' => "The Title"
              ],
              'fields' => 'title'
          ],
          'UpdateCellsRequest' => [
              'properties' => [
                  'range' => "Sheet1!A1",
                  'backgroundColor' => "#000"
              ],
              'fields' => ''
          ]
      ])
    ];

    // Add additional requests (operations) ...
    $batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
        'requests' => $requests
    ]);

    $response = $GoogleSheetsAPIHandler->sheets->spreadsheets->batchUpdate("SHEETID", $batchUpdateRequest);

    print_r($response);
如果我拿出这个:

'UpdateCellsRequest' => [
  'properties' => [
      'range' => "Sheet1!A1",
      'backgroundColor' => "#000"
  ],
  'fields' => ''
]
然后,代码会更新图纸标题。然而,我似乎无法更新一个范围的颜色


任何建议都将不胜感激

我相信你的目标和情况如下

  • 您希望使用googleapis for php更改单元格的背景色
  • 您已经能够使用Sheets API获取和输入Google电子表格的值
修改点:
  • 如果要使用Sheets API的batchUpdate方法,请将每个请求放到
    请求数组的每个元素中
  • 我认为脚本中UpdateCellsRequest的请求主体不正确。
    • 从您提出的
      问题来看,我正试图通过PHP中的Google Sheets API更改范围颜色。
      ,当您想用一种颜色更改多个单元格的背景颜色时,我认为RepeatCellRequest可能是合适的
在这个答案中,我想提出一个修改脚本,用于使用一种颜色更改多个单元格。当您的脚本被修改时,它将变成如下所示

修改脚本: 使用前,请设置图纸ID

$requests = [
    new Google_Service_Sheets_Request([
        'updateSpreadsheetProperties' => [
            'properties' => [
                'title' => "The Title"
            ],
            'fields' => 'title'
        ]
    ]),
    new Google_Service_Sheets_Request([
        'repeatCell' => [
            'cell' => [
                'userEnteredFormat' => [
                    'backgroundColor' => [
                        'red' => 1,
                        'green' => 0,
                        'blue' => 0
                    ]
                ]
            ],
            'range' => [
                'sheetId' => $sheetId,  // <--- Please set the sheet ID.
                'startRowIndex' => 0,
                'endRowIndex' => 3,
                'startColumnIndex' => 0,
                'endColumnIndex' => 2
            ],
            'fields' => 'userEnteredFormat'
        ]
    ])
];
$requests=[
新谷歌服务请求([
'updateSpreadsheetProperties'=>[
“属性”=>[
“标题”=>“标题”
],
“字段”=>“标题”
]
]),
新谷歌服务请求([
“repeatCell'=>[
“单元格”=>[
“userEnteredFormat”=>[
“背景颜色”=>[
“红色”=>1,
“绿色”=>0,
“蓝色”=>0
]
]
],
“范围”=>[
“sheetId'=>$sheetId,//0,
'endRowIndex'=>3,
“startColumnIndex”=>0,
'endColumnIndex'=>2
],
'字段'=>'用户输入格式'
]
])
];
  • 当上述请求正文用于Sheets API的batchUpdate方法时,电子表格的标题将更改,单元格“A1:B3”的背景颜色将更改为红色

  • 如果要使用UpdateCellsRequest,可以使用以下请求正文。在以下请求正文中,单元格“A1:B1”的背景色分别更改为红色和绿色。使用UpdateCellsRequest时,可以更新每个单元格。关于UpdateCellsRequest的详细信息,请查看官方文档

    $requests=[
    新谷歌服务请求([
    'updateCells'=>[
    “行”=>数组([
    '值'=>数组(
    ['userEnteredFormat'=>[
    “背景颜色”=>[
    “红色”=>1,
    “绿色”=>0,
    “蓝色”=>0
    ]
    ]],
    ['userEnteredFormat'=>[
    “背景颜色”=>[
    “红色”=>0,
    “绿色”=>1,
    “蓝色”=>0
    ]
    ]]
    )
    ]),
    “范围”=>[
    “sheetId'=>$sheetId,//0,
    “startColumnIndex”=>0,
    ],
    '字段'=>'用户输入格式'
    ]
    ])
    ];
    
参考资料:

您好,谢谢您的回答!:)我尝试了修改后的脚本代码。我发现这个错误:@jacktrowbridge谢谢你的回复。给您带来不便,我深表歉意。虽然我不确定您当前的整个脚本,但从您的错误消息来看,我认为您可能使用了电子表格ID作为
$sheetId
。工作表ID与电子表格ID不同。如果我的猜测正确,请修改它。您可以在中看到图纸ID。如果这不能解决您当前的问题,您能否提供复制问题的整个脚本。通过这个,我想确认一下。嘿,耶!是的,它现在可以工作:)索引是否从0开始?当我在PHP中更改一个行索引为4的单元格时。然后在我的谷歌表中,它在第5行。。。它还会重置该单元格中的所有其他格式。例如粗体、大小、对齐等。。。有没有办法阻止这一切?或者我该如何改变格式呢?是否在“userEnteredFormat”下@Jack Trowbridge谢谢您的回复。我很高兴你的问题解决了。关于您的第二个问题
索引是否从0开始?
,在Google电子表格中,创建新电子表格时,第一个选项卡的工作表ID为
0
。这似乎是目前的规格。您好,谢谢您的回复。我在这里提出了另一个问题:
  $requests = [
      new Google_Service_Sheets_Request([
          'updateCells' => [
              'rows' => array([
                  'values' => array(
                      ['userEnteredFormat' => [
                          'backgroundColor' => [
                              'red' => 1,
                              'green' => 0,
                              'blue' => 0
                          ]
                      ]],
                      ['userEnteredFormat' => [
                          'backgroundColor' => [
                              'red' => 0,
                              'green' => 1,
                              'blue' => 0
                          ]
                      ]]
                  )
              ]),
              'range' => [
                  'sheetId' => $sheetId,  // <--- Please set the sheet ID.
                  'startRowIndex' => 0,
                  'startColumnIndex' => 0,
              ],
              'fields' => 'userEnteredFormat'
          ]
      ])
  ];