В данной статье я попытаюсь вам объяснить как быстро сделать подключение ваших PHP скриптов к Гугл докам, и создать таблицу в Google Sheets (Sheetspread), обновить ячейки, удалить или создать лист в таблице.
“Нагугливая” много информации по тому как создать таблицы в Google Docs я не нашел ничего полезного, но всё же есть немного полезных ссылочек. И вот я вам скину самые полезные из них:
- https://developers.google.com/drive/api/v3/integrate-create
- https://developers.google.com/drive/api/v3/reference/files/create
- https://developers.google.com/sheets/api/guides/values
- https://www.twilio.com/blog/2017/03/google-spreadsheets-and-php.html
- https://github.com/asimlqt/php-google-spreadsheet-client#adding-a-worksheet
А теперь я попытаюсь вам лично объяснить как использовать таблицы Google через PHP в кратце.
Для начала вам понадобиться Composer и несколько зависимостей.
Мой Composer.json выглядит вот так:
{ "require": { "asimlqt/php-google-spreadsheet-client": "3.0.*", "google/apiclient": "^2.0" } }
Исходя из него вы сами сможете составить свой Composer.json, самое важное это composer require asimlqt/php-google-spreadsheet-client и google/apiclient
О том как установить Composer я писал ранее здесь: https://neatek.ru/install-composer-debian-apt-get-install-latest
После подключения всех зависимостей, пробуем создать таблицу по уже произведенной авторизации, у вас должен быть accessToken который получают при авторизации, с правами: ’email’, ‘https://spreadsheets.google.com/feeds’, ‘https://www.googleapis.com/auth/drive.file’
Чтобы просто создать файл в Google Drive производим следующие действия:
$sheettitle = 'Моя первая таблица в Гугл'; $driveService = new Google_Service_Drive($client); // Здесь ваш класс new Google_Client() $fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => $sheettitle, 'mimeType' => 'application/vnd.google-apps.spreadsheet' // указываем Mime-type файла )); $file = $driveService->files->create($fileMetadata, array('fields' => 'id')); // указываем что нужно вернуть нам $file->id
Вуаля, наш файл создан.
Далее чтобы получить наш spreadsheet производим следующие действия.
use Google\Spreadsheet\DefaultServiceRequest; use Google\Spreadsheet\ServiceRequestFactory; $serviceRequest = new DefaultServiceRequest($accessToken); // Здесь токен который был получен при авторизации ServiceRequestFactory::setInstance($serviceRequest); $spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheetFeed(); $spreadsheet = $spreadsheetFeed->getByTitle($sheettitle); // Здесь название созданной таблицы
В итоге мы получили нашу таблицу которая готова к изменениям.
Попробуем удалить наш первый лист который по-умолчанию размеров 100х10, где 100 строк, и 10 колонок, это обычно мало.
$worksheetFeed = $spreadsheet->getWorksheetFeed(); $worksheet = $worksheetFeed->getByTitle('Лист1'); $worksheet->delete();
Мы удалили первый наш лист в таблице. Но на замену нужно создать другой лист других размеров, соответственно наш код измениться так:
$spreadsheet->addWorksheet('Мой лист новый', 2000, 100); // 2000 строк + 100 колонок $worksheetFeed = $spreadsheet->getWorksheetFeed(); $worksheet = $worksheetFeed->getByTitle('Лист1'); $worksheet->delete();
Теперь в нашей таблице только 1 лист наших размеров.
Для заполнения таблиц есть очень великолепный инструмент как BatchRequest, посылаем запросы “стопкой”, а не по одному:
$cellFeed = $worksheet->getCellFeed(); $batchRequest = new Google\Spreadsheet\Batch\BatchRequest(); for($i=1;$i<10;$i++) { $batchRequest->addEntry($cellFeed->createCell($i,1, 'Ячейка заполнена')); } $batchResponse = $cellFeed->insertBatch($batchRequest);
В результате этого у нас будет 1 столбец с записями Ячейка заполнена ровно в 8 строк.
На этом всё, урок закончен. Теперь вы можете создавать таблицы, создавать листы, удалять листы, и заполнять данными листы в таблицах.
Всем хорошего дня!
Внимание! Действует ограничение на количество ячеек на всей таблице это 500.000 штук.
также после смены WordsheetFeed (getByTitle) нужно обязательно производить Wordsheet (getCellFeed)