Php как создать excel файл

Создание Excel документа на PHP (генерация .xls файлов)

Follow us on Twitter Follow us on rss

Привет! Однажды у меня возникала задача по генерации отчетов в Excel на backend’е, которую я решил и теперь могу поделиться одним из способов создания документов Excel и добавлением в них данных средствами PHP.

Существует несколько библиотек для работы с xls файлами на PHP, но мы рассмотрим PHPExcel, попробуем создать файл xls, наполнить его данными и немного оформить стиль, то есть разберемся с базовым функционалом, которого будет достаточно для выполнения многих задач связанных с генерацией документов Excel на PHP. Однако, библиотека позволяет делать многое, в том числе работать с формулами, применять различные стили оформления, работать с листами.

Код скрипта, который вы увидите по ходу прочтения статьи, доступен на github.

Библиотека PHPExcel доступна в Composer как PHPOffice/PHPExcel. Я инициализирую в пустом каталоге composer и добавлю в зависимости PHPOffice/PHPExcel.

$ composer init $ composer require PHPOffice/PHPExcel

После создам файл generator.php и в нем подключу автозагрузку библиотек Composer’а.

Теперь можно приступить к работе, используя библиотеку PHPExcel.

Давайте создадим пустой документ со списком котов «CatList».

$document = new \PHPExcel(); $objWriter = \PHPExcel_IOFactory::createWriter($document, 'Excel5'); $objWriter->save("CatList.xls");

Мы создали экземпляр класса PHPExcell и создали объект, используя фабрику, который занимается сохранением документов. Кстати, вторым аргументом метода createWriter можно передавать значение «PDF» и таким образом генерировать PDF файлы средствами PHP.

После запуска скрипта в директории появился файл CatList.xls, его можно открыть в Excel и убедиться, что он пустой и программа его открывает без ошибок.

Заполнение Excel документа данными

Давайте попробуем засунуть в файл список котов, создав три столбца с порядковым номером, именем и цветом шерстки. Сперва нам нужны исходные данные, их мы создадим вручную в виде массива

$catList = [ ['name' => 'Tom', 'color' => 'red'], ['name' => 'Bars', 'color' => 'white'], ['name' => 'Jane', 'color' => 'Yellow'], ];

Наша табличка будет иметь заголовок, вписанный в три объединенные клетки. При этом мы сделаем возможность выбора координат для отрисовки таблички.

$document = new \PHPExcel(); $sheet = $document->setActiveSheetIndex(0); // Выбираем первый лист в документе $columnPosition = 0; // Начальная координата x $startLine = 2; // Начальная координата y // Вставляем заголовок в "A2" $sheet->setCellValueByColumnAndRow($columnPosition, $startLine, 'Our cats'); // Выравниваем по центру $sheet->getStyleByColumnAndRow($columnPosition, $startLine)->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Объединяем ячейки "A2:C2" $document->getActiveSheet()->mergeCellsByColumnAndRow($columnPosition, $startLine, $columnPosition+2, $startLine); // Перекидываем указатель на следующую строку $startLine++;

На выходе получаем документ с заголовком, вставленным в объединенную ячейку по центру. Перейдем к отрисовке шапки.

// Массив с названиями столбцов $columns = ['№', 'Name', 'Color']; // Указатель на первый столбец $currentColumn = $columnPosition; // Формируем шапку foreach ($columns as $column) < // Красим ячейку $sheet->getStyleByColumnAndRow($currentColumn, $startLine) ->getFill() ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB('4dbf62'); $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $column); // Смещаемся вправо $currentColumn++; >

Шапка документа

Перейдем к заполнению данными из списка наших котов.

// Формируем список foreach ($catList as $key=>$catItem) < // Перекидываем указатель на следующую строку $startLine++; // Указатель на первый столбец $currentColumn = $columnPosition; // Вставляем порядковый номер $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $key+1); // Ставляем информацию об имени и цвете foreach ($catItem as $value) < $currentColumn++; $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $value); > >

Теперь, открыв отчёт, можно убедиться, что он сформирован как нужно.

Список котов

 'Tom', 'color' => 'red'], ['name' => 'Bars', 'color' => 'white'], ['name' => 'Jane', 'color' => 'Yellow'], ]; $document = new \PHPExcel(); $sheet = $document->setActiveSheetIndex(0); // Выбираем первый лист в документе $columnPosition = 0; // Начальная координата x $startLine = 2; // Начальная координата y // Вставляем заголовок в "A2" $sheet->setCellValueByColumnAndRow($columnPosition, $startLine, 'Our cats'); // Выравниваем по центру $sheet->getStyleByColumnAndRow($columnPosition, $startLine)->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Объединяем ячейки "A2:C2" $document->getActiveSheet()->mergeCellsByColumnAndRow($columnPosition, $startLine, $columnPosition+2, $startLine); // Перекидываем указатель на следующую строку $startLine++; // Массив с названиями столбцов $columns = ['№', 'Name', 'Color']; // Указатель на первый столбец $currentColumn = $columnPosition; // Формируем шапку foreach ($columns as $column) < // Красим ячейку $sheet->getStyleByColumnAndRow($currentColumn, $startLine) ->getFill() ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB('4dbf62'); $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $column); // Смещаемся вправо $currentColumn++; > // Формируем список foreach ($catList as $key=>$catItem) < // Перекидываем указатель на следующую строку $startLine++; // Указатель на первый столбец $currentColumn = $columnPosition; // Вставляем порядковый номер $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $key+1); // Ставляем информацию об имени и цвете foreach ($catItem as $value) < $currentColumn++; $sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $value); > > $objWriter = \PHPExcel_IOFactory::createWriter($document, 'Excel5'); $objWriter->save("CatList.xls");

Для вас это может быть интересно:

Создание Excel документа на PHP (генерация .xls файлов) : 7 комментариев

Источник

Формирование Excel-документов средствами PHP

Возможность создания Excel-документов в общих чертах уже была описана на Хабре, но полной информации из этих статей мне получить не удалось. Пришлось заняться собственными изысканиями, результатами которых я хотел бы с Вами поделиться. Данная статья будет полезна и новичкам, и профессионалам, столкнувшимся с проблемой динамического формирования Excel-документов.
Это всего лишь первая часть серии статей, которыми хотелось бы поделиться с общественностью. В последующих статьях будут более подробно рассмотрены некоторые способы и нюансы выгрузки xls-файлов.

Введение

Не хочу распространяться на тему того, зачем необходима выгрузка в Excel. Мне кажется, что это вполне очевидно: в формате MS Excel достаточно удобно предоставлять пользователю загружаемые данные. Это могут быть прайс-листы, каталоги или любая подобная служебная, статистическая и иного рода информация.
Сразу хочу оговориться, что в статье рассматривается работа с документами через COM-объекты. Данный метод таботает только на Windows-платформах. Другими словами, если Вы предпочитаете *nix-хостинг, этот метод Вам не подходит.

Синтаксис

Создание COM-объекта осуществляется следующим образом:
$my_com_object = new COM($object_class);
, где
$my_com_object — новый COM-объект;
$object_class — id-класс требуемого объекта.

Для создания Excel-документов переменной $object_class необходимо задать значение «Excel.Application» либо «Excel.sheet».
$xls = new COM(«Excel.Application»);

После создания нового COM-объекта, можно обращаться к его свойствам и методам:
$xls = new COM(«Excel.Application»); // Создание объекта
$xls->Application->Visible = 1; // Делаем объект видимым
$xls->Workbooks->Add(); // Добавляем новую книгу (создаём документ)

$rangeValue = $xls->Range(«A1»);
$rangeValue->Value = «Декорация текста: жирный, подчеркнутый, наклонный»;
$rangeValue = $xls->Range(«A2»);
$rangeValue->Value = «Размер шрифта: 14»;
$rangeValue = $xls->Range(«A3»);
$rangeValue->Value = «Тип шрифта: Arial»;

$range=$xls->Range(«A1:J10»); // Указываем область ячеек
$range->Select(); // Выделяем эту область
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область

// Отформатируем текст в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = «Arial»; // Тип шрифта
$fontRange->Font->Size = 14; // Размер шрифта
?>

Открытие, запись, закрытие документа
Общие возможности
  • создать новый документ
  • открыть ранее созданный документ
  • сохранить открытый документ
  • закрыть документ
Создание нового документа
  1. создаем «связь» между PHP и Excel (создается дескриптор, как при работе с файлами)
  2. указываем, будет ли визуально открыта программа или нет
  3. указываем программе через дескриптор, что нужно открыть новый документ
Открытие ранее созданного документа

Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Open(«C:\my_doc.xls»); // Открываем ранее сохраненный документ
?>
Внимание! Если указать не полный, а относительный путь, то поиск открываемого файла будет происходить не на сервере, а на компьютере пользователя. По умолчанию это папка «Мои документы».

Сохранение открытого документа

Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks():
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Проба записи»; // Вставляем значение

// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);

$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Хочу отдельно отметить, что высвобождение объектов — это очень хорошо и правильно. Да сгорят в священном очищающем пламени костров Инквизиции те, кто считает иначе.

Закрытие документа

Закрытие документа производится методом Quit().
$xls = new COM(«Excel.Application»); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range(«A1»); // Выбираем ячейку A1
$range->Value = «Что-то записываем»; // Вставляем значение в ячейку

// Сохраняем документ
$xls->Workbooks[1]->SaveAs(«my_doc.xls»);

$xls->Quit(); // Закрываем приложение
$xls->Release(); // Высвобождаем объекты
$xls = Null;
$range = Null;
?>

Заключение

Если статья оказалась Вам полезна и интересна, буду рад подготовить продолжение, где более подробно будут рассматриваться методы работы с листами документов, ячейками и границами.
Разумеется, если это кому-то интересно и необходимо для работы.

Источник

Читайте также:  Применение регулярных выражений java
Оцените статью