О web-разработке
и даже немного больше...

PHPExcel — OpenXML — чтение, запись и создание документов Excel в PHP

Операционные системы Windows продолжают быть популярными и по сей день, как следствие это влияет на все отрасли касающихся персональных компьютеров, и веб разработка не стала исключением. Продукт Microsoft Office включает в себя множество полезных программ, одной из которых является Excel. Excel позволяет работать с электронными таблицами, которые успешно используются для экономическо-статистических расчетов множеством людей на планете.

Иногда возникает необходимость реализации взаимодействия файлов Excel с веб-приложениями, к примеру, необходимо импортировать какие-либо данные из таблицы документа, либо наоборот, создать документ с неким набором данных. Поговорим о том, как можно организовать взаимодействие без больших временных затрат. Сразу стоит заметить, что PHP в стандартной своей комплектации не имеет специальных функций для взаимодействия с файлами Excel. Однако это не является серьезной проблемой, обойтись без которой можно вполне.

Существует проект, его участники создали PHP-библиотеку, которая упрощает работу с файлами Excel. Библиотека называется PHPExcel, она имеет GNU лицензию и находиться в открытом доступе. Рассмотрим пример использования данной библиотеки.
Предварительно необходимо скачать архив с файлами. На данный момент, я скачал архив PHPExcel_1.7.9_doc.zip. В архиве содержится файлы библиотек, документация и примеры использования.

Со всем этим вы сможете ознакомиться самостоятельно, мы же перейдем к самому примеру. Попробуем сформировать Excel файл.

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

Подключаем библиотеку в скрипте, перед её использованием.

require_once ('/library/PHPExcel.php');

Создаем объект:

$objPHPExcel = new PHPExcel();

Задаем информацию о создаваемом файле:

$objPHPExcel->getProperties()->setCreator("Rustam Atashev")
	->setLastModifiedBy("Rustam Atashev")
	->setTitle("Office 2007 XLSX Test Document")
	->setSubject("Office 2007 XLSX Test Document")
	->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
	->setKeywords("office 2007 openxml php")
	->setCategory("example file");

Теперь время задавать данные ячеек:

$objPHPExcel->setActiveSheetIndex(0)
		->setCellValue('A1', 'Код')
		->setCellValue('B1', 'Имя')
		->setCellValue('C1', 'Город');

Следующая строка задается таким же образом, стоит лишь обратить внимание на номера ячеек, для второй строки они будут A2, B2, C2.

Задаем имя таблицы:

$objPHPExcel->getActiveSheet()->setTitle('Справочник');

Сохраняем в файл:

$objPHPExcel->setActiveSheetIndex(0);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('Example.xlsx');

В итоге получаем файл с именем Example.xlsx, содержимое которого соответствует тому, что мы задали.

excel

Кроме того, есть возможность более гибко использовать данную библиотеку для работы с различными параметрами таблицы. По этим вопросам рекомендуется обращаться к документации. Библиотека PHPExcel так же умеет работать с другими типами файлов, таких как Excel (BIFF). XLS, Excel 2007 (OfficeOpenXML). XLSX, CSV, Libre / OpenOffice Calc. ODS, Gnumeric, PDF, HTML, проект в целом построен вокруг OpenXML Microsoft, и PHP.

UPD:
Так же рекомендую к прочтению: PHPExcel: форматирование ячеек.

Опубликован: 12.01.2014 г.

См. также:

Редакторы кода для PHP
Как просмотреть время загрузки страницы в PHP?
Генерация QR-кода в PHP
Загрузка файлов на сервер посредством Ajax
Импорт записей из Excel в WordPress
Парсинг XML в PHP
Установка IonCube на XAMPP
Создание PDF файлов в PHP

Комментарии

  1. Okta пишет:

    Супер, спасибо большое, как раз этого мне и не хватало, CSV не отвечает многим требованиям.

  2. incom пишет:

    Можно ли создать файл Excel c сгруппировать строками ( + и - ) ? Если, можно, напишите небольшие примеры. Заранее благодарю!

    1. htmaker пишет:

      Можно,

      $objPHPExcel = new PHPExcel();

      // чтобы плюсики были с верху
      $objPHPExcel->getActiveSheet()->setShowSummaryBelow(false);

      // ячейка первая, корневая
      $objPHPExcel->getActiveSheet()->setCellValue('A1', "test1");
      $objPHPExcel->getActiveSheet()->getRowDimension(1)->setOutlineLevel(0);
      $objPHPExcel->getActiveSheet()->getRowDimension(1)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension(1)->setCollapsed(false);

      // ячейка вторая
      $objPHPExcel->getActiveSheet()->setCellValue('A2', "test2");
      // указываем корневую ячейку - 1
      $objPHPExcel->getActiveSheet()->getRowDimension(2)->setOutlineLevel(1);
      $objPHPExcel->getActiveSheet()->getRowDimension(2)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension(2)->setCollapsed(false);

      // ячейка 3
      $objPHPExcel->getActiveSheet()->setCellValue('A3', "test3");
      // указываем корневую ячейку - 1
      $objPHPExcel->getActiveSheet()->getRowDimension(3)->setOutlineLevel(1);
      $objPHPExcel->getActiveSheet()->getRowDimension(3)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension(3)->setCollapsed(false);

      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
      $objWriter->save('file2.xlsx');

      Вот это дело вложениями в несколько уровней:


      $i=2;
      while($i<1000)
      {

      $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "test".$i);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(1);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
      $i++;

      for($j=0;$j<5;$j++)
      {
      $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "test".$i);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(2);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
      $i++;

      for($k=0;$k<5;$k++)
      {
      $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "test".$i);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setOutlineLevel(3);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setVisible(true);
      $objPHPExcel->getActiveSheet()->getRowDimension($i)->setCollapsed(false);
      $i++;
      }
      }
      }

  3. Жалгас пишет:

    А как создать файл и потом просто добавлять в него значения?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта