Сохраняем таблицу из PHPExcel в Google Docs

Возможно вы знаете, что PHPExcel можно легко расширить, добавив поддержку новых форматов чтения и записи. Класс PHPExcel - это ядро библиотеки для работы с таблицами, а реализации интерфейсов IReader и IWriter используются для работы с файлами.

В настоящее время, PHPExcel поддерживает Excel2007, Excel5 (Excel 97+), CSV, HTML и PDF. Но в нем нет поддержки таблиц Google Docs! Это легко можно исправить, используя комбинацию следующих технологий:

PHPExcel – www.phpexcel.net библиотека для работы с таблицами.

Zend Framework - http://framework.zend.com PHP фреймворк. Zend Framework содержит замечательный набор классов Zend_Gdata, который предоставляет возможность работать с документами Google Docs.

Создаем класс для сохранения таблиц в Google Docs

Во-первых, мы должны реализовать интерфейс PHPExcel_Writer_IWriter, который будет осуществлять запись данных в Google Docs. Так как Google Docs понимает формат XLS, а у Zend_Gdata есть метод для загрузки файла на сервер, я думаю, можно расширить класс PHPExcel_Writer_Excel5 для использования его вместе с Google Docs.

  1. class PHPExcel_Writer_GoogleDocs extends PHPExcel_Writer_Excel5
  2. implements PHPExcel_Writer_IWriter {
  3. // ...
  4. }

Так как Google Docs требуют авторизацию для работы с документами, добавим поля логин и пароль.

  1. class PHPExcel_Writer_GoogleDocs extends PHPExcel_Writer_Excel5
  2. implements PHPExcel_Writer_IWriter {
  3. private $_username;
  4. private $_password;
  5. public function setCredentials($username, $password) {
  6. $this->_username = $username;
  7. $this->_password = $password;
  8. }
  9. }

Теперь, переопределим метод save(). Этот метод будет сохранять документ как таблицу XLS, закачивать его в Google Docs и после этого - удалять из файловой системы. Итак:

  1. public function save($pFilename = null) {
  2. parent::save($pFilename);
  3. $googleDocsClient = Zend_Gdata_ClientLogin::getHttpClient(
  4. $this->_username,
  5. $this->_password, Zend_Gdata_Docs::AUTH_SERVICE_NAME);
  6. $googleDocsService = new Zend_Gdata_Docs($googleDocsClient);
  7. $googleDocsService->uploadFile($pFilename, basename($pFilename), null,
  8. Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI);
  9. @unlink($pFilename);
  10. }

Все, больше ничего не надо! Мы создали класс для сохранения таблиц.

Использование класса

Теперь попробуем сохранить таблицу в Google Docs. Для начала загрузим документ из файловой системы:

  1. $objReader = PHPExcel_IOFactory::createReader('Excel2007');
  2. $objPHPExcel = $objReader->load("05featuredemo.xlsx");

Теперь, используя класс IOFactory загрузим класс PHPExcel_Writer_GoogleDocs. Установим так же параметры для авторизации. После всего этого - сохраним документ.

  1. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'GoogleDocs');
  2. $objWriter->setCredentials('xxxxxxxx@gmail.com', 'xxxxxxxx');
  3. $objWriter->save('somefile.xls');

Вот и все. Теперь в вашем Google Docs есть таблица созданная PHPExcel.

Обратите внимание, что картинки не отображаются, так как Google Docs удаляет их при загрузке документа. Но ведь это только начало!

Вы можете скачать полный код примера здесь. Конечно, у вас уже должны быть PHPExcel, Zend Framework и Zend Gdata.

оригинал

0 Responses to Сохраняем таблицу из PHPExcel в Google Docs

Leave a Reply