Добавление и создание таблиц в Google Docs через PHP

google-sheets-docs-sheet-spread-php-add-row-cell-update-insert-personal-fast-easy2

В данной статье я попытаюсь вам объяснить как быстро сделать подключение ваших PHP скриптов к Гугл докам, и создать таблицу в Google Sheets (Sheetspread), обновить ячейки, удалить или создать лист в таблице.

“Нагугливая” много информации по тому как создать таблицы в Google Docs я не нашел ничего полезного, но всё же есть немного полезных ссылочек. И вот я вам скину самые полезные из них:

  1. https://developers.google.com/drive/api/v3/integrate-create
  2. https://developers.google.com/drive/api/v3/reference/files/create
  3. https://developers.google.com/sheets/api/guides/values
  4. https://www.twilio.com/blog/2017/03/google-spreadsheets-and-php.html
  5. 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)