Jump to content

Recommended Posts

Posted

Есть скрипт на PHP, который работает с онлайн-таблицами Google.

Умеет считывать значения, сохранять значения.

Ранее также умел применять форматирование, но ту версию скрипта я случайно удалил и восстановить не получилось.

Сейчас снова возникла необходимость форматировать таблицу. И никак не могу это реализовать.

Помню, что в прошлом скрипте полтора дня убил, потому что там совсем не очевидный синтаксис использования, кучу времени убил на экспериментирование, пока не получил работающий результат.

 

Библиотека "Google Sheets API v4" установлена, к ней делаю более удобную с использовании обертку.

Обертка выглядит так (пример):

class GoogleSheets
{
...
	/***
	 * Получить данные с листа
	 */
	public function getValues($sheet, $range=null, $options=[])
	{
		$svc = $this->store['service'];
		$id = $this->store['document'];
		if (isset($options))
		{
			if (!is_array($options)) $options = ['valueRenderOption'=>$options];
			$options['dateTimeRenderOption'] = 'FORMATTED_STRING';
		}
		$res = $svc->spreadsheets_values->get($id, $sheet . (isset($range) ? '!'.$range : ''), $options);
		sleep(1);
		return $res;
	}

	/***
	 * Изменить данные на листе
	 */
	public function setValues($sheet, $range, $data)
	{
		$svc = $this->store['service'];
		$id = $this->store['document'];
		$data = new \Google_Service_Sheets_ValueRange(['values'=>$data]);
		$options = ['valueInputOption'=>'USER_ENTERED'];
		$res = $svc->spreadsheets_values->update($id, $sheet . (isset($range) ? '!'.$range : ''), $data, $options);
		sleep(1);
		return $res;
	}

	/***
	 * Задать форматирование
	 */
	public function setFormat($sheet, $range, $format)
	{
		...
		$req = [];
		$req['range'] = ...;
		$req['cell'] = ['userEnteredFormat'=>$fmt];
		$req['fields'] = "userEnteredFormat(" . implode(",", array_keys($fmt)) . ")";
		$svc = $this->store['service']; # $service из документации
		$id = $this->store['document']; # $spreadsheetId из документации
		$data = new \Google_Service_Sheets_BatchUpdateValuesRequest(['requests'=>[['repeatCell'=>$req]]]);
		$res = $svc->spreadsheets_values->batchUpdate($id, $data);
		sleep(1);
		return $res;
	}

...
}

В таком виде не работает, пишет про некорректный запрос (Invalid JSON payload received. Unknown name "requests": Cannot find field.).

Не посоветуете, как поправить?

Понимаю, что тут форум не программистов. но может кто сталкивался?

 

Добавлено:

Блин, надо было вчера еще в форуме это спросить.

Стоило опубликовать сообщение, как сразу в глаза бросилось Values.

 

Вот рабочая версия кода:

		$svc = $this->store['service'];
		$id = $this->store['document'];
		$data = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(['requests'=>[['repeatCell'=>$req]]]);
		$res = $svc->spreadsheets->batchUpdate($id, $data);

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.