среда, 31 августа 2016 г.

Получение данных из ячеек SpreadSheet Google Docs с помощью Zend Gdata Записки веб-программиста.

В этой заметке рассмотрим интересный случай, когда необходимо получить данные из ячеек таблицы spreadsheet Google Docs(аналог десктопного microsoft excel). Для этого понадобится доступ к аккаунту gmail.com, id документа и библиотека Zend_Gdata от Zend Framework. За библиотекой можете стучаться ко мне.

Сначала устанавливаем рабочую директорию и подключаем библиотеку и необходимые классы. Авторизуемся и указываем нужный документ. Указываем необходимый для нас рабочий лист и собираем все данные непустых ячеек в массив и работаем с ним дальше.
Все очень просто, единственный минус, это длительное по времени подключение к api google docs. В целом, это очень интересная реализация, нечто напоминающая работу с внешней базой данных. Огромный плюс такого способа работы с данными, это удобное внешнее многопользовательское управление данными. В общем, все те же преимущества, что и в работе с документами от Google Docs. Также api поддерживает внесение и изменение значений в ячейках.

 /* Получение данных из ячеек документа Spreadsheets Google Docs */

 set_include_path('../libs/class/ZendGdata'); //устанавливаем значение настройки конфигурации include_path
 require_once $_SERVER['DOCUMENT_ROOT'].'/libs/class/ZendGdata/Zend/Loader.php'; //загружаем ZendGdata

 $login = 'user@gmail.com'; //доступ к аккаунту:  e-mail
 $password = 'password'; //доступ к аккаунту:  password
 $idDoc = '1wdQD39r3YX-g8KinaNZnsQEMwd_ya2r3YX-g8OBFZn69g'; //id документа(из урла)

 /**
  * @see Zend_Gdata
  */
 Zend_Loader::loadClass('Zend_Gdata');

 /**
  * @see Zend_Gdata_AuthSub
  */
 Zend_Loader::loadClass('Zend_Gdata_AuthSub');

 /**
  * @see Zend_Gdata_ClientLogin
  */
 Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

 /**
  * @see Zend_Gdata_Docs
  */
 Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');
 Zend_Loader::loadClass('Zend_Gdata_Spreadsheets_DocumentQuery');
 Zend_Loader::loadClass('Zend_Gdata_Spreadsheets_CellQuery');
 $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;

 $client = Zend_Gdata_ClientLogin::getHttpClient($login, $password, $service); //доступ к аккаунту:  e-mail\password

 $spreadsheetService = new Zend_Gdata_Spreadsheets($client);

 $query = new Zend_Gdata_Spreadsheets_DocumentQuery();
 $query->setSpreadsheetKey($idDoc); //id документа(из урла)
 $feed = $spreadsheetService->getWorksheetFeed($query);

 foreach($feed as $worksheet){
  if($worksheet->getTitle() == 'Лист1'){ //название листа
   $_projects[(string)$worksheet->getTitle()] = array('title' => (string)$worksheet->getTitle(), 'worksheet' => basename($worksheet->getId())); //здесь собираем данные листа Лист1(название, id)
  }
 }

 foreach($_projects as $_projects_data){
  $queryrow = new Zend_Gdata_Spreadsheets_CellQuery();
  $queryrow->setSpreadsheetKey($query->getSpreadsheetKey());
  $queryrow->setWorksheetId($_projects_data['worksheet']); //заносим id листа
  $cellFeed = $spreadsheetService->getCellFeed($queryrow);

  foreach($cellFeed as $cellEntry) {
   $row = $cellEntry->cell->getRow(); //номер строки
   $col = $cellEntry->cell->getColumn(); //номер колонки
   $val = $cellEntry->cell->getText();  //значение ячейки
   $rowData[$row][$col] = $val; //собираем в массив
  }
 }
 // print_r($rowData); //здесь нужный массив с данными из ячеек 
 
В итоге мы имеем массив с данными из ячеек в виде:

 Array
 (
  [1] => Array
   (
    [1] => x
    [2] => y
    [3] => z
   ),
  [2] => Array
   (
    [1] => a
    [2] => b
   )
 )
 

0 коммент.:

Отправить комментарий