Получение данных из ячеек SpreadSheet Google Docs с помощью Zend Gdata

← Назад в записки веб-программиста

Получение данных из ячеек SpreadSheet Google Docs с помощью Zend Gdata

phpячейкаspreadsheetgoogle docszend 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
			)
	)