gpt4 book ai didi

php - Google 表格 - 设置背景颜色

转载 作者:行者123 更新时间:2023-12-04 12:44:57 24 4
gpt4 key购买 nike

我正在编写一个以前由另一个开发人员持有的应用程序。经过某种处理后,他想用值填充 Google 表格文件。在他开始开发之前,他就走了,留给我的是理解 google-api-client-php 库的任务。

我设法插入值(这对我来说是一大步),但我想为某些单元格添加背景颜色。我没有找到任何方法来实现这一点......

现在,这就是我插入值的方式:

class Sheet {
public function __construct($client) {
$this->service = new \Google_Service_Sheets($client);
}
public function write($line, $newValues, $startColumn)
{
$values = new \Google_Service_Sheets_ValueRange();
$values->setValues([ $newValues ]);

$this->service->spreadsheets_values->update($this->id, $range, $values, ['valueInputOption' => 'USER_ENTERED']);
}
}

我想创建一个 colorLine()功能。

这是我的第一次尝试:
 public function colorLine($line, $r, $g, $b, $a = 1) {
$myRange = [
'sheetId' => 1,
'startRowIndex' => $line,
'endRowIndex' => $line,
'startColumnIndex' => 0,
'endColumnIndex' => 1000,
];

$requests = [
new \Google_Service_Sheets_Request([
'addConditionalFormatRule' => [
'rule' => [
'ranges' => [ $myRange ],
'booleanRule' => [
'condition' => [
'type' => 'CUSTOM_FORMULA',
'values' => [ [ 'userEnteredValue' => '=1' ] ]
],
'format' => [
'backgroundColor' => [ 'red' => $r, 'green' => $g, 'blue' => $b ]
]
]
],
'index' => 1
]
])
];

$batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => $requests
]);
$response = $this->service->spreadsheets->batchUpdate($this->id,
$batchUpdateRequest);
}

首先,我什至不明白我写了什么......另外,它说“无效请求[0].addConditionalFormatRule:没有id:1的网格”,但它并没有那么糟糕,我不认为它会做我正在寻找的。

我认为它会创建一个“条件格式”,但我只想要一个背景......这个 API 对于简单的应用程序来说看起来非常复杂......

反正!如果有人能帮助我,我将不胜感激!

最佳答案

如果您真的不关心解释,请转到最后一部分:)

这可能不是最好的解决方案,但至少它奏效了。

解决方案的解释(TL,NR):

我们需要什么 ?

  • 我们想要的 RGBa 值
  • 范围(sheetId、行索引、列
    索引)
  • 电子表格 ID。

  • 现在,我们应该如何进行?好吧,以前的源代码实际上并没有那么糟糕......只需要稍微改变一下:
  • 我们不想创建 ConditionalFormats,而是为了更新单元格,所以我们应该使用“repeatCell”请求(我将解释为什么“repeatCell”而不是“updateCell”)
  • In this request ,我们可以有 3 个参数:
  • 掩码字段(限制更新),
  • 范围
  • 细胞。那是一个 CellData object可以包含“userEnteredFormat”( CellFormat )现在 您可以访问 backgroundColor 属性!!

  • 开始编码:

    好的,让我们定义范围:

    你不能在同一个位置有“开始”和“结束”(所以在开始时有-1,它只会改变一行)
        $myRange = [
    'sheetId' => $sheetId,
    'startRowIndex' => $line-1,
    'endRowIndex' => $line,
    'startColumnIndex' => 0,
    'endColumnIndex' => 17,
    ];

    现在让我们定义颜色(每个组件必须在 0 和 1 之间):
        $format = [
    "backgroundColor" => [
    "red" => $r,
    "green" => $g,
    "blue" => $b,
    "alpha" => $a,
    ],
    ];

    就是这样,我们几乎准备好了!

    我们只需要告诉服务我们想要一个“repeatCell”请求。不要忘记“字段”参数。如果不限制更新,单元格的所有数据都会改变, 包括文字 !在这种情况下,“字段”的路径从“单元格”开始,因此我们只需键入“userEnteredFormat.backgroundColor”。然后使用之前创建的 $format 变量。
        $requests = [
    new \Google_Service_Sheets_Request([
    'repeatCell' => [
    'fields' => 'userEnteredFormat.backgroundColor',
    'range' => $myRange,
    'cell' => [
    'userEnteredFormat' => $format,
    ],
    ],
    ])
    ];

    好的!完毕。现在在批处理中包含这个(或这些)请求:
        $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
    'requests' => $requests
    ]);

    最后,使用服务发送请求,包括电子表格 ID(在我的情况下为 $this->id)。
        $response = $this->service->spreadsheets->batchUpdate($this->id,
    $batchUpdateRequest);

    完整的解决方案:

    感谢阅读,这是您的解决方案:
    public function colorLine($line, $r, $g, $b, $a = 1.0, $worksheetName = null)
    {
    if($r > 1) $r = Tools::rescale($r, 0, 255, 0, 1);
    if($g > 1) $g = Tools::rescale($g, 0, 255, 0, 1);
    if($b > 1) $b = Tools::rescale($b, 0, 255, 0, 1);
    if($a > 1) $a = Tools::rescale($a, 0, 255, 0, 1);

    $worksheetName = ($worksheetName ? : $this->defaultWorksheet);
    $sheetId = $this->getWorksheetId($worksheetName);

    $myRange = [
    'sheetId' => $sheetId,
    'startRowIndex' => $line-1,
    'endRowIndex' => $line,
    'startColumnIndex' => 0,
    'endColumnIndex' => 17,
    ];
    $format = [
    "backgroundColor" => [
    "red" => $r,
    "green" => $g,
    "blue" => $b,
    "alpha" => $a,
    ],
    ];

    $requests = [
    new \Google_Service_Sheets_Request([
    'repeatCell' => [
    'fields' => 'userEnteredFormat.backgroundColor',
    'range' => $myRange,
    'cell' => [
    'userEnteredFormat' => $format,
    ],
    ],
    ])
    ];

    $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
    'requests' => $requests
    ]);
    $response = $this->service->spreadsheets->batchUpdate($this->id,
    $batchUpdateRequest);
    }

    关于php - Google 表格 - 设置背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52080251/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com