alibek Posted May 7, 2022 Posted May 7, 2022 Есть скрипт на 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); Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.