Если вам не нужны объяснения, просто перейдите к последнему разделу:)
Возможно, это не лучшее решение, но, по крайней мере, оно сработало.
Объяснение решения (TL, NR):
Что нам нужно?
- Значения RGBa, которые мы хотим
- Диапазон (sheetId, индекс строки, столбцы
индекс)
- Идентификатор электронной таблицы.
Теперь, как нам действовать? Ну, предыдущий исходный код не был настолько плохим на самом деле ... Просто нужно немного его изменить:
- Мы не хотим создавать условные форматы, а должны обновлять ячейки, поэтому мы должны использовать запрос « repeatCell » (я объясню, почему вместо « repeatCell ») updateCell")
- В этом запросе у нас может быть 3 параметра:
- поле маски (которое ограничивает обновления),
- диапазон
- клетка. Это объект CellData , который может содержать "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,
],
],
])
];
OK! Готово. Теперь включите этот (или эти) запрос в пакет:
$batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => $requests
]);
И, наконец, отправьте запрос с услугой, включите идентификатор таблицы ($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);
}