среда, 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 коммент.:
Отправить комментарий