Для работы с Excel использовал библиотеку PHPExcel. Установка простейшая – кладем папку Classes в нужную папку на сервере, указываем корректные пути в include/require.
Примеры кода по чтению/генерации файлов Excel можно посмотреть на github странице библиотеки.
Красивости
и этим не ограничивается функционал, это лишь то, что использовал:
- mergeCells(“cell_range”) – Объединение указанных ячеек в одну. Данные должны лежать в первой ячейке, иначе они теряются.
$doc->getActiveSheet()->mergeCells("B3:C3");
- setSize(16) – Делаем размер шрифта 16 для указанных ячеек.
$doc->getActiveSheet()->getStyle('B2:G2')->getFont()->setSize(16);
- setBold(true) – Делаем текст “жирным”
$doc->getActiveSheet()->getStyle('A1:O1')->getFont()->setBold(true);
- setWrapText(true) – Делаем перенос слов по умолчанию для всех ячеек
$doc->getDefaultStyle()->getAlignment()->setWrapText(true); $doc->getDefaultStyle()->getAlignment()->setWrapText(false); #disable
- setAutoFilter – Включить фильтр по умолчанию
$doc->getActiveSheet()->setAutoFilter('A1:K1');
- freezePane – Закрепить какие либо строки, например первую
$doc->getActiveSheet()->freezePane('A2');
- borders – делается через создание стиля, а потом его применение на указанный диапазон ячеек
$styleBorder = array( 'borders' => array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN ) ) ); $doc->getActiveSheet()->getStyle('B2:G2')->applyFromArray($styleBorder);
- color – Аналогично с помощью стилей меняем цвет шрифта (Font)
$styleFontColor = array( 'font' => array( 'color' => array('rgb' => 'FF0000'), )); $doc->getActiveSheet()->getStyle('D10')->applyFromArray($styleFontColor);
- setARGB – Изменить цвет ячейки, например
- всей первой строки
- конкретной ячейки (делал так цвет был переменным и задавался на основе данных – формировался разноцветный показательный Excel)
- диапазона ячеек по диагонали
$doc->getActiveSheet()->getStyle('A1:E1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FFE8E5E5'); $doc->getActiveSheet()->getStyle("A$val:$last_column$val")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FFE8E5E5'); $doc->getActiveSheet()->getStyle('I1:Z1000')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FFE8E5E5');
ЧТЕНИЕ
Код для чтения (два столбца):
<!doctype> <html> <head> </head> <body> <?php require_once "Classes/PHPExcel.php"; $tmpfname = "test.xlsx"; $excelReader = PHPExcel_IOFactory::createReaderForFile($tmpfname); $excelObj = $excelReader->load($tmpfname); $worksheet = $excelObj->getSheet(0); $lastRow = $worksheet->getHighestRow(); echo "<table>"; for ($row = 1; $row <= $lastRow; $row++) { echo "<tr><td>"; echo $worksheet->getCell('A'.$row)->getValue(); echo "</td><td>"; echo $worksheet->getCell('B'.$row)->getValue(); echo "</td><tr>"; } echo "</table>"; ?> </body> </html>
Редактирование
Открываем файл test.xlsx, на его основе создаем новый new.xlsx с измененными парой ячеек.
<?php error_reporting(E_ALL); require_once('Classes/PHPExcel.php'); $excel2 = PHPExcel_IOFactory::createReader('Excel2007'); $excel2 = $excel2->load('test.xlsx'); $excel2->setActiveSheetIndex(0); $excel2->getActiveSheet()->setCellValue('J103', 'LOLOLOLOL') ->setCellValue('O103', 'LOLOLOLOL') ->setCellValue('Q103', 'LOLOLOLOL'); $objWriter = PHPExcel_IOFactory::createWriter($excel2, 'Excel2007'); $objWriter->save('new.xlsx'); ?>
weril.me
От автора: очень часто при разработке веб-приложений возникает задача создать прайс-лист товаров либо услуг какой то кампании в формате таблиц Microsoft Excel. Но при этом необходимо предусмотреть, чтобы он свободно генерировался на основе данных, хранящихся в базе данных.
В сегодняшнем уроке мы с Вами решим такую задачу. То есть мы научимся генерировать документ в формате таблиц Excel при помощи языка PHP и специальной библиотеки PHPExcel. Это очень мощная и очень широко применяемая библиотека с огромнейшим функционалом. Конечно, все ее возможности за один урок рассмотреть мы не сможем, но узнать основы и научиться с ней работать — мы вполне успеем.
План урока
1. Подготовка к уроку.
2. Установка библиотеки PHPExcel.
3. Основные настройки листа книги Excel.
4. Наполнение документа данными.
5. Стилизация данных.
Детали учебника
1. Подготовка к уроку.
Первое что нам потребуется для создания прайс-листа – это данные, которые в нем выводить. Для этого я подготовил базу данных (под названием price), в которой содержится всего одна табличка – tovar. В табличке содержится несколько наименований товара, для вывода в прайс-листе. Ее дамп Вы сможете взять из изходников к уроку.
Далее я подготовил очень простой скрипт, который вытаскивает данные из базы данных, а конкретнее из таблички tovar, и формирует из этих данных массив. С этим массивом мы с Вами и будем работать.
Скрипт включает в себя всего три файла:
Важное замечание!
Если Вы хотите использовать для вывода данных в формате EXCEL русские символы, то обязательно все файлы нужно сохранять в кодировке UTF8.
Далее давайте приведу код всех трех файлов. Файл config.php:
Как Вы видите, здесь все элементарно. Просто задаем четыре константы для хранения настроек подключения к базе данных. И собственно, выполняем подключение и выбор базы данных для работы. Далее устанавливаем кодировку запросов.
Следующий файл functions.php:
Здесь также все очень просто. Описана всего лишь одна функция, которая выполняет запрос к базе данных и формирует по результатам выборки массив. Далее я приведу распечатку этого массива.
И последний файл index.php:
В этом файле мы дальше будем вести все кодирование. Это пока лишь заготовка. Как Вы видите, вначале я подключаю файлы config.php и functions.php и вызываю функцию get_price(), для получения массива товаров.
Давайте я приведу распечатку этого массива (при помощи функции print_r()):
Теперь, думаю, Вам понятно, что содержится в массиве $price_list. Теперь перейдем к установке библиотеки PHPExcel.
2. Установка библиотеки PHPExcel.
Первым делом библиотеку необходимо скачать. Для этого переходим на официальный сайт библиотеки — //phpexcel.codeplex.com/ :
И нажимаем по кнопке download. В результате скачивания у нас получится архив PHPExcel-1.7.7.zip. Давайте его распакуем. Как Вы видите, после распаковки у нас получилось несколько файлов и папок:
Файлы — это различные описания по предыдущим версиям, лицензионное соглашение и очень краткая инструкция по установке. Далее в папке Classes, содержится непосредственно сама библиотека PHPExcel – эту папку необходимо скопировать в корень нашего скрипта, что я и сделал.
В папке Documentation – содержится документация по библиотеке, но правда она на английском языке. Но все равно я Вам рекомендую с ней ознакомиться. Так как библиотека имеет огромнейший функционал, и конечно сегодня мы весь его не рассмотрим. А в документации Вы найдете много всего интересного.
В папке Tests – содержатся примеры по использованию библиотеки.
Итак, если Вы скопировали папку Classes в корень скрипта, то мы можем приступать к дальнейшей работе.
Итак, переходим в файл index.php и начинаем работать с ним. Теперь нам необходимо подключить главный файл библиотеки PHPExcel.php (который находится в папке Classes) к нашему скрипту и создать объект класса PHPExcel:
Для тех кто не знает класс – это своего рода чертеж или описательный элемент, какой то определенной сущности. То есть в нашем случае (если сказать простыми словами) класс PHPExcel.php описывает все методы (это обычные функции, только описанные в классе) и свойства (переменные класса) необходимые для вывода данных в формате Excel.
Для того что бы создать объект класса необходимо указать переменную ($objPHPExcel) затем поставить знак присвоения, далее ключевое слово new и указать имя класса. Объект – это такой тип переменной, который позволяет нам работать с методами и свойствами класса. То есть если мы создали объект, то мы получили доступ ко всему, что описано в классе.
На этом установка библиотеки завершена, можно приступать к работе с ней.
3. Основные настройки листа книги Excel.
Как Вы знаете, документ Excel состоит из книг, а каждая книга в свою очередь, состоит из листов. Далее лист состоит из набора ячеек, доступ к которым осуществляется по координатам. То есть у нас есть столбцы, которые имеют буквенные имена (А, В, С и т.д) и есть строки, которые пронумерованы. Значит, что бы получить доступ к первой ячейке нужно указать код А1. Точно также мы с помощью библиотеки будем получать доступ к каждой ячейке.
Итак, первым делом необходимо выбрать активный лист, на который мы будем выводить данные и получить объект этого листа.
С помощью метода setActiveSheetIndex(0) – указываем индекс (номер) активного листа. Нумерация листов начинается с нуля. Далее с помощью метода getActiveSheet() – получаем объект этого активного листа, то есть другими словами получаем доступ к нему для работы. И сохраняем этот объект в переменную $active_sheet.
Если Вы захотите указать активным какой то другой лист, то вначале его необходимо создать, при помощи метода:
Затем по аналогии, указываем индекс и получаем объект активного листа.
Теперь давайте сгенерируем наш первый документ Excel (правда конечно пока пустой), для этого в файл index.php в его конец добавим следующий код (далее весь код, который я буду приводить, следует вставлять перед этим кодом – то есть код который идет ниже должен быть в самом низу файла – это уже завершение скрипта!!!):
В начале, обратите внимание, отправляем заголовки.
Первый – указываем браузеру тип открываемого контента – это документ формата Excel. И второй – указываем браузеру, что документ необходимо отдать пользователю на скачивание и тут же указываем имя скачиваемого файла (‘simple.xls’ ).
Далее документ необходимо сохранить. Сначала нужно указать, в какой версии мы его сохраняем. Для этого у класса PHPExcel_IOFactory вызываем метод createWriter() и передаем ему объект $objPHPExcel и указываем версию Excel5. При этом будет создан объект класса PHPExcel_Writer_Excel5 и у него вызываем метод save(). Этому методу передаем параметром строку ‘php://output’, это означает, что файл не будет сохранен, а будет отдан браузеру, а браузер в свою очередь, отдаст его нам на скачивание.
Теперь немного о версиях. Кроме версии Excel5, доступна также версия Excel2007, но так как у меня установлен MS Office 2003, то версия Excel2007 у меня просто не откроется. Поэтому я создаю документ версии Excel5.
Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:
Как Вы видите, мы с Вами получили пустой документ в формате Excel, с одним активным листом.
Теперь давайте пропишем остальные настройки листа (обратите внимание, что все методы мы вызываем у объекта $active_sheet – объекта активного листа документа и весь код вставляем перед заголовками – функция header):
Итак, вначале задаем ориентацию листа, при помощи метода setOrientation(), которому передаем константу, ORIENTATION_PORTRAIT, класса PHPExcel_Worksheet_PageSetup. Эта константа — означает, что ориентация страницы будет портретом.
Если Вы хотите расположить лист в виде альбомного листа, нужно методу setOrientation(), передать константу Worksheet_PageSetup::ORIENTATION_LANDSCAPE.
Обратите внимание, что перед методом setOrientation() необходимо вызвать метод getPageSetup() – который предоставит нам доступ к настройкам страницы (вернет объект класса, который отвечает за настройки страницы).
Далее вызываем метод SetPaperSize(), который позволяет задать размер страницы, для печати. Ему передаем параметром константу PAPERSIZE_A4, класса — PHPExcel_Worksheet_PageSetup. Что означает, что размер листа страницы будет установлен А4.
Это можно проверить, если открыть документ, в формате Excel и перейти в меню Файл, затем на пункт параметры страницы.
Далее устанавливаем поля документа, то есть отступы от краев документа. Отступы задаются в специальных символьных единицах. Вначале, обратите внимание, вызываем у объекта $active_sheet, метод getPageMargins() (он вернет объект класса, который отвечает за настройки полей страницы). Затем вызываем метод setTop(1), который задает верхний отступ страницы.
Далее по аналогии методы setRight(0.75), setLeft(0.75), setBottom(1) – задают соответственно правый, левый и нижний отступы документа.
Далее давайте при помощи метода setTitle(«Прайс лист») – зададим название нашего листа.
Затем при печати (если кому это нужно), можно выводить шапку и нижний футер листа. Такую возможность можно задать при помощи методов setOddHeader(«&CШапка нашего прайс-листа») и setOddFooter(‘&L&B’.$active_sheet->getTitle().’&RСтраница &P из &N’), которые задают соответственно — шапку и футер документа.
Обратите внимание на передаваемые параметры:
Для шапки – передаем строку — &C Шапка нашего прайс-листа (метка &C – означает, что текст нужно расположить по центру).
Для футера – передаем строку — &L&B’.$active_sheet->getTitle().’&RСтраница &P из &N’, это означает, что нужно вывести слева и жирным шрифтом (&L&B’), название листа (метод $active_sheet->getTitle()), затем справа (&R) вывести номер страницы (Страница &P) из общего количества страниц (&N).
Полный список меток, можно посмотреть в документации. Я этот список Вам не привожу, так как он очень большой, да и многие из них Вам не понадобятся.
Затем указываем настройки шрифта по умолчанию. Это можно сделать при помощи последовательного вызова методов:
Теперь если сохранить изменения и сгенерировать наш документ, то можно увидеть что у нас изменилось название листа документа на Прайс-лист, и если открыть предварительный просмотр страницы, то можно увидеть как выводится шапка и футер документа.
4. Наполнение документа данными
Для начала давайте зададим ширину основных столбцов, которые нам понадобятся:
Как вы видите вначале обращаемся к нашему объекту активного листа, далее вызываем метод getColumnDimension(‘A’) – то есть получаем доступ ширине столбца А (либо любого другого столбца, какой мы передадим методу параметром), затем задаем ширину, при помощи метода setWidth(ширина столбца) и передаем ему ширину в символьных единицах.
Для остальных столбцов – все аналогично.
Давайте посмотрим, что получилось:
Как Вы видите, размеры столбцов изменились. Теперь давайте заполним несколько ячеек текстом:
В начале давайте объединим ячейки с А1 до D1, при помощи метода mergeCells(диапазон ячеек) – который позволяет объединять ячейки.
Далее зададим высоту этих объединенных ячеек (строка 1), при помощи методов getRowDimension(’1′)->setRowHeight(40) – смотрите, вначале получаем доступ к строке 1 (getRowDimension(’1′)), затем задаем высоту (setRowHeight(высота строки)).
И затем при помощи метода setCellValue(‘A1′,’Техно мир’), устанавливаем значение ячейки А1. Этот метод позволяет записать данные в любую ячейку. Координаты ячейки передаем первым параметром, а значение – вторым.
Следующие ячейки заполняем по аналогии. Давайте посмотрим, что у нас получилось:
Далее давайте в ячейку D4 запишем текущую дату:
Для этого запишем текущую дату в ячейку D4, а затем установим формат данных этой ячейки – как дата. Для этого необходимо последовательно вызвать методы у объекта $active_sheet:
То есть получаем доступ к стилям ячейки D4 ( метод getStyle(‘D4′) вернет объект класса отвечающий за стили ячейки), затем получаем формат данных этой ячейки и устанавливаем новый формат данных (setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14)).
В константе FORMAT_DATE_XLSX14 хранится строка с форматом даты (вида дд-мм-гггг). Все константы, относящиеся к форматам даты можно посмотреть в документации по библиотеке.
Теперь, используя метод setCellValue(), а также цикл foreach() давайте наполним данными наш прайс-лист:
Теперь давайте сохраним изменения и посмотрим, что получилось:
Как Вы видите, данные успешно вывелись.
5. Стилизация данных.
Теперь давайте красиво украсим наш прайс-лист, то есть каждой ячейке добавим стилей. Для этого необходимо создать массив со стилями (стили очень похожи на правила CSS), и при помощи метода applyFromArray($массив стилей), применить этот массив к ячейке:
Обратите внимание, как необходимо оформлять массив стилей. Вначале идет главный массив с ключом – главное правило (к примеру borders – рамки), а в нем еще массивы с правилами. Стили для каждого правила (для каждого вида рамки) – это константы. К примеру, BORDER_THICK – это жирная рамка, BORDER_THIN – это тоненькая рамка.
После создания массива вызываем методы getStyle() – для получения объекта класса, отвечающего за стили выбранной ячейки, а затем метод applyFromArray($style_wrap), который применяет массив стилей к ячейке.
Обратите внимание, как я указал диапазон ячеек в методе getStyle(‘A1:D’.($i+6)). Переменная $i – это число итераций цикла, который выводит данные из массива. А число 6 – это количество строк до вывода данных из цикла. Давайте перейдем в браузер и посмотрим, что получилось:
Как Вы видите, стили успешно применились. Теперь давайте по аналогии, применим стили к остальным ячейкам:
Теперь давайте посмотрим на окончательный результат нашей работы:
Вот так вот выглядит окончательный вариант нашего прайс-листа. Согласитесь очень достойный вид. Притом, что мы не затратили на его создание очень много времени. Еще раз Вам рекомендую просмотреть документацию по библиотеке PHPExcel, там содержится очень много всего интересного.
На этом у меня все. Удачного Вам кодирования и до новых встреч!
webformyself.com
Часто на сайтах требуется выгрузка каких либо данных в формате excel (xslx). Естественно все хотят чтоб документ был уже сразу на выходе красиво оформлен. Недавно и мне потребовалось сделать такую выгрузку на php. Принято было решение использовать библиотеку PHPExcel – ее можно скачать тут
В скачанном вами архиве очень много документации и примеров, библиотека позволяет все от простого форматирования текста и формата ячеек до создания красивых графиков.
В моем случае, нужно было просто закрасить ячейку в нужный цвет в зависимости от значения в данной ячейке.
Подключаем библиотеку, указываем данные нашего документа:
require_once 'phpexcel/Classes/PHPExcel.php'; // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // Set document properties $objPHPExcel->getProperties()->setCreator('test') ->setLastModifiedBy('test') ->setTitle('test') ->setSubject('test') ->setDescription('test') ->setKeywords('test') ->setCategory('test');
Далее инициализируем возможные стили для ячеек, я указал border(границы) и background (закраску цветом):
$red = new PHPExcel_Style(); $yellow = new PHPExcel_Style(); $green = new PHPExcel_Style(); $red->applyFromArray( array('fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => 'FF3333') ), 'borders' => array( 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ) )); $yellow->applyFromArray( array('fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => 'FFFF66') ), 'borders' => array( 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ) )); $green->applyFromArray( array('fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => '66CC66') ), 'borders' => array( 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ) ));
Далее нам нужно внести данные в таблицу excel, делается это очень просто. Для того чтоб было быстрее я использовал метод fromArray:
$objPHPExcel->getActiveSheet()->fromArray($data_arr, NULL, 'A1'); // A1 - ячейка с которой начинаем вставку
А лишь потом делал закраску ячеек цветом ($data_arr – массив с данными)
$temp=array('B'=>'first','C'=>'second','D'=>'third','E'=>'fourth','F'=>'fifth','G'=>'sixth'); foreach($data_arr as $r => $dataRow) { $row = $baseRow + $r; foreach($temp as $k=>$t) { $color=getStyle($dataRow[$t]); // выставляем нужный цвет $objPHPExcel->getActiveSheet()->setSharedStyle($$color, $k.''.$row); } } function getStyle($value) { if ($value <= 45 && $value >= 0) return 'green'; elseif ($value > 45 && $value < 50) return 'yellow'; else return 'red'; }
Для 10 тысяч строк этот случай обрабатывался гораздо быстрее чем тот, где мы построчно заносим данные в xlsx документ:
foreach($data_arr as $r => $dataRow) { $row = $baseRow + $r; $objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1); foreach($temp as $k=>$t) { $color=getStyle($dataRow[$t]); $objPHPExcel->getActiveSheet()->setCellValue($k.''.$row, $dataRow[$t])->setSharedStyle($$color, $k.''.$row); } }
Так же можно вручную указать ширину колонке, например самая первая колонка у меня должна была быть немного шире чем обычно:
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
Форматирование закончено, можем сохранить файл созданный с помощью php генератора excel файла в формате xlsx:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('filename.xlsx');
webguruz.ru
как можно подключить phpexcel и при клике отдавать документ с содержимым из запросамассива?
вот что пока сделал
пробую установить вендором phpexcel
d:openopenserver>cd D:openOpenServerdomainslocalhostminingprotected
D:openOpenServerdomainslocalhostminingprotected>composer require "yiisoft/yii:@stable"
D:openOpenServerdomainslocalhostminingprotected>composer require "phpoffice/phpexcel:@stable"
D:openOpenServerdomainslocalhostminingprotected>composer require laxu/yii-phpexcel
отсюда
но при $model->writeExcelFile(); //analizviewselementadmin.php
public function writeExcelFile() //analizmodelsElement.php
{
$manager = Yii::app()->getComponent(‘yii-phpexcel’);
//Create empty instance
$excel = $manager->create();
//Add a header row with a grey background
$headerStyle = array(
‘fill’ => array(
‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
‘color’ => array(‘rgb’ => ‘CCCCCC’)
)
);
$excel->addHeaderRow(
array(
‘header1’,
‘header2’,
‘header3’
),
$headerStyle
);
//Add a few rows of data to the document
//Note that addData doesn’t care about the actual keys in the data, only the order of values
$data = array(
array(
‘data1’,
‘data2’,
‘data3’,
),
array(
‘id’ => 1,
‘name’ => ‘Example’,
‘moreData’ => ‘Something’
)
);
$excel->addData($data);
$excel->save();
}
получаю
CException
Неправильный алиас "laxu.yii_phpexcel". Убедитесь, что он указывает на существующую директорию или файл.
protectedconfigmain.php
// application components
‘components’ => array(
‘yii-phpexcel’ => array(
‘class’ => ‘laxuyii_phpexcelExcelManager’,
‘savePath’ => ‘app.files.excel’
),
как понимаю нужно хитро autoloader настроить, не пойму как
forundex.ru
Импорт данных из PHP в Excel
Рассмотрим пример по формированию таблицы умножения.
// Подключаем класс для работы с excel require_once('PHPExcel.php'); // Подключаем класс для вывода данных в формате excel require_once('PHPExcel/Writer/Excel5.php'); // Создаем объект класса PHPExcel $xls = new PHPExcel(); // Устанавливаем индекс активного листа $xls->setActiveSheetIndex(0); // Получаем активный лист $sheet = $xls->getActiveSheet(); // Подписываем лист $sheet->setTitle('Таблица умножения'); // Вставляем текст в ячейку A1 $sheet->setCellValue("A1", 'Таблица умножения'); $sheet->getStyle('A1')->getFill()->setFillType( PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyle('A1')->getFill()->getStartColor()->setRGB('EEEEEE'); // Объединяем ячейки $sheet->mergeCells('A1:H1'); // Выравнивание текста $sheet->getStyle('A1')->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); for ($i = 2; $i < 10; $i++) { for ($j = 2; $j < 10; $j++) { // Выводим таблицу умножения $sheet->setCellValueByColumnAndRow( $i - 2, $j, $i . "x" .$j . "=" . ($i*$j)); // Применяем выравнивание $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()-> setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } }
Далее нам необходимо получить наш *.xls файл. Здесь можно пойти двумя путями. Если предположим у вас интернет магазин, и клиент хочет скачать прайс лист, то будет лучше прибегнуть к такому выводу:
// Выводим HTTP-заголовки header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" ); header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" ); header ( "Cache-Control: no-cache, must-revalidate" ); header ( "Pragma: no-cache" ); header ( "Content-type: application/vnd.ms-excel" ); header ( "Content-Disposition: attachment; filename=matrix.xls" ); // Выводим содержимое файла $objWriter = new PHPExcel_Writer_Excel5($xls); $objWriter->save('php://output');
Здесь сформированные данные сразу “выплюнутся” в браузер. Однако, если вам нужно файл сохранить, а не “выбросить” его сразу, то не нужно выводить HTTP-заголовки и вместо “php://output” следует указать путь к вашему файлу. Помните что каталог, в котором предполагается создание файла, должен иметь права на запись. Это касается UNIX-подобных систем.
Рассмотрим еще на примере три полезные инструкции:
- $sheet->getColumnDimension(‘A’)->setWidth(40) – устанавливает столбцу “A” ширину в 40 единиц;
- $sheet->getColumnDimension(‘B’)->setAutoSize(true) – здесь у столбца “B” будет установлена автоматическая ширина;
- $sheet->getRowDimension(4)->setRowHeight(20) – устанавливает четвертой строке высоту равную 20 единицам.
Также обратите внимание на следующие необходимые для работы с отчетом методы:
- Методы для вставки данных в ячейку:
- setCellValue([$pCoordinate = ‘A1’ [, $pValue = null [, $returnCell = false]]]) — принимает три параметра: координату ячейки, данные для вывода в ячейку и третий параметр эта одна из констант типа boolean: true или false (если передать значение true, то метод вернет объект ячейки, иначе объект рабочего листа);
- setCellValueByColumnAndRow([$pColumn = 0 [, $pRow = 1 [, $pValue = null [, $returnCell = false]]]]) — принимает четыре параметра: номер столбца ячейки, номер строки ячейки, данные для вывода в ячейку и четвертый параметр действует по аналогии с третьим параметром метода setCellValue().
- Методы для получения ячейки:
- getCell([$pCoordinate = ‘A1’]) — принимает в качестве параметра координату ячейки;
- getCellByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) — принимает два параметра в виде номеров столбца и строки ячейки.
Как мы видим, вышеприведенные методы являются парными. Поэтому мы можем работать с ячейками используя строковое или числовое представление координат. Что конечно же является дополнительным преимуществом в работе.
Оформление отчета средствами PHP в Excel
Очень часто возникает необходимость выделить в отчете некоторые данные. Сделать выделение шрифта или применить рамку с заливкой фона для некоторых ячеек и т.д. Что позволяет сконцентрироваться на наиболее важной информации (правда может и наоборот отвлечь). Для этих целей в библиотеке PHPExcel есть целый набор стилей, которые можно применять к ячейкам в excel. Есть конечно в этой библиотеке небольшой “минус” – нельзя применить стиль к нескольким ячейкам одновременно, а только к каждой индивидуально. Но это не создает дискомфорта при разработке web-приложений.
Назначить стиль ячейке можно тремя способами:
- Использовать метод applyFromArray, класса PHPExcel_Style. В метод applyFromArray передается массив со следующими параметрами:
- fill — массив с параметрами заливки;
- font — массив с параметрами шрифта;
- borders — массив с параметрами рамки;
- alignment — массив с параметрами выравнивания;
- numberformat — массив с параметрами формата представления данных ячейки;
- protection — массив с параметрами защиты ячейки.
- Применить метод duplicateStyle, класса PHPExcel_Style. Этот метод может оказаться весьма полезным, если предстоит работа с заранее загруженным файлом (шаблоном), где удобнее будет продублировать стиль некой ячейки, чем самостоятельно его определять. Данный метод принимает два параметра:
- pCellStyle – данный параметр является экземпляром класса PHPExcel_Style;
- pRange – диапазон ячеек.
- Использовать методы класса PHPExcel_Style для каждого из стилей в отдельности. К примеру, назначить ячейке шрифт можно так: $sheet->getStyle(‘A1’)->getFont()->setName(‘Arial’) .
Заливка
Значением параметра fill является массив со следующими необязательными параметрами:
- type — тип заливки;
- rotation — угол градиента;
- startcolor — значение в виде массива с параметром начального цвета в формате RGB;
- endcolor — значение в виде массива с параметром конечного цвета в формате ARGB;
- color — значение в виде массива с параметром начального цвета в формате RGB.
Стили заливки
FILL_NONE | none |
FILL_SOLID | solid |
FILL_GRADIENT_LINEAR | linear |
FILL_GRADIENT_PATH | path |
FILL_PATTERN_DARKDOWN | darkDown |
FILL_PATTERN_DARKGRAY | darkGray |
FILL_PATTERN_DARKGRID | darkGrid |
FILL_PATTERN_DARKHORIZONTAL | darkHorizontal |
FILL_PATTERN_DARKTRELLIS | darkTrellis |
FILL_PATTERN_DARKUP | darkUp |
FILL_PATTERN_DARKVERTICAL | darkVertical |
FILL_PATTERN_GRAY0625 | gray0625 |
FILL_PATTERN_GRAY125 | gray125 |
FILL_PATTERN_LIGHTDOWN | lightDown |
FILL_PATTERN_LIGHTGRAY | lightGray |
FILL_PATTERN_LIGHTGRID | lightGrid |
FILL_PATTERN_LIGHTHORIZONTAL | lightHorizontal |
FILL_PATTERN_LIGHTTRELLIS | lightTrellis |
FILL_PATTERN_LIGHTUP | lightUp |
FILL_PATTERN_LIGHTVERTICAL | lightVertical |
FILL_PATTERN_MEDIUMGRAY | mediumGray |
Пример указания настроек для заливки:
array( 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 0, 'startcolor' => array( 'rgb' => '000000' ), 'endcolor' => array( 'argb' => 'FFFFFFFF' ), 'color' => array( 'rgb' => '000000' ) );
Или можно использовать следующие методы:
$PHPExcel_Style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR);
$PHPExcel_Style->getFill()->setRotation(0);
$PHPExcel_Style->getFill()->getStartColor()->applyFromArray(array(‘rgb’ => ‘C2FABD’));
$PHPExcel_Style->getFill()->getEndColor()->applyFromArray(array(‘argb’ => ‘FFFFFFFF’)).
Вставка изображений
Довольно редко, но бывает полезным произвести вставку изображения в отчет. Это может быть логотип, схема и т.д. Для работы нам понадобятся следующие методы:
- setPath([$pValue = '', [$pVerifyFile = true]]) — данный метод принимает два параметра. В качестве первого параметра указывается путь к файлу с изображением. А второй параметр имеет смысл указывать, если необходимо осуществлять проверку существования файла (может принимать одно из значений true или false).
- setCoordinates([$pValue = ‘A1’])) — принимает на вход один параметр в виде строки с координатой ячейки.
- setOffsetX([$pValue = 0]) — принимает один параметр со значением смещения по X от левого края ячейки.
- setOffsetY([$pValue = 0]) — принимает один параметр со значением смещения по Y от верхнего края ячейки.
- setWorksheet([$pValue = null, [$pOverrideOld = false]]) — этот метод принимает на вход два параметра. Первый является обязательным, а второй нет. В качестве первого параметра указывается экземпляр объекта активного листа. Если в качестве значения второго параметра передать true, то если лист уже был назначен ранее – произойдет его перезапись и соответственно изображение удалится.
Код демонстрирующий алгоритм вставки изображения приведен ниже:
... $sheet->getColumnDimension('B')->setWidth(40); $imagePath = dirname ( __FILE__ ) . '/excel.png'; if (file_exists($imagePath)) { $logo = new PHPExcel_Worksheet_Drawing(); $logo->setPath($imagePath); $logo->setCoordinates("B2"); $logo->setOffsetX(0); $logo->setOffsetY(0); $sheet->getRowDimension(2)->setRowHeight(190); $logo->setWorksheet($sheet); } ...
Вот так выглядит отчет со вставленным изображением:
Шрифт
В качестве значения параметра font указывается массив, который содержит следующие необязательные параметры:
- name — имя шрифта;
- size — размер шрифта;
- bold — выделять жирным;
- italic — выделять курсивом;
- underline — стиль подчеркивания;
- strike — перечеркнуть;
- superScript — надстрочный знак;
- subScript — подстрочный знак;
- color — значение в виде массива с параметром цвета в формате RGB.
Стили подчеркивания
UNDERLINE_NONE | нет |
UNDERLINE_DOUBLE | двойное подчеркивание |
UNDERLINE_SINGLE | одиночное подчеркивание |
Пример указания параметров настроек для шрифта:
array( 'name' => 'Arial', 'size' => 12, 'bold' => true, 'italic' => false, 'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE, 'strike' => false, 'superScript' => false, 'subScript' => false, 'color' => array( 'rgb' => '808080' ) );
Или воспользоваться следующими методами:
$PHPExcel_Style->getFont()->setName(‘Arial’);
$PHPExcel_Style->getFont()->setBold(true);
$PHPExcel_Style->getFont()->setItalic(false);
$PHPExcel_Style->getFont()->setSuperScript(false);
$PHPExcel_Style->getFont()->setSubScript(false);
$PHPExcel_Style->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE);
$PHPExcel_Style->getFont()->setStrikethrough(false);
$PHPExcel_Style->getFont()->getColor()->applyFromArray(array(‘rgb’ => ‘808080’));
$PHPExcel_Style->getFont()->setSize(12).
Рамка
В качестве значения параметра borders указывается массив, который содержит следующие необязательными параметры:
- тип рамки — (top|bootom|left|right|diagonal|diagonaldirection);
- style — стиль рамки;
- color — значение в виде массива с параметром цвета в формате RGB.
Стили линий
BORDER_NONE | нет |
BORDER_DASHDOT | пунктирная с точкой |
BORDER_DASHDOTDOT | пунктирная с двумя точками |
BORDER_DASHED | пунктирная |
BORDER_DOTTED | точечная |
BORDER_DOUBLE | двойная |
BORDER_HAIR | волосная линия |
BORDER_MEDIUM | средняя |
BORDER_MEDIUMDASHDOT | пунктирная с точкой |
BORDER_MEDIUMDASHDOTDOT | утолщенная пунктирная линия с двумя точками |
BORDER_MEDIUMDASHED | утолщенная пунктирная |
BORDER_SLANTDASHDOT | наклонная пунктирная с точкой |
BORDER_THICK | утолщенная |
BORDER_THIN | тонкая |
Пример указания параметров настроек для рамки:
array( 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, 'color' => array( ' rgb' => '808080' ) ), 'top' => array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, 'color' => array( 'rgb' => '808080' ) ) );
Так же можно прибегнуть к использованию следующих методов:
$PHPExcel_Style->getBorders()->getLeft()->applyFromArray(array(‘style’ =>PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′)));
$PHPExcel_Style->getBorders()->getRight()->applyFromArray(array(‘style’ =>PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′)));
$PHPExcel_Style->getBorders()->getTop()->applyFromArray(array(‘style’ =>PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′)));
$PHPExcel_Style->getBorders()->getBottom()->applyFromArray(array(‘style’ =>PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′)));
$PHPExcel_Style->getBorders()->getDiagonal()->applyFromArray(array(‘style’ => PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′)));
$PHPExcel_Style->getBorders()->setDiagonalDirection(array(‘style’ =>PHPExcel_Style_Border::BORDER_DASHDOT,’color’ => array(‘rgb’ => ’808080′))).
Выравнивание
Значением параметра alignment является массив, который принимает на вход четыре необязательных параметра:
- horizontal — константа горизонтального выравнивания;
- vertical — константа вертикального выравнивания;
- rotation — угол поворота текста;
- wrap — разрешить перенос текста;
- shrinkToFit — изменять ли размер шрифта при выходе текста за область ячейки;
- indent — отступ от левого края.
Выравнивание по горизонтали
HORIZONTAL_GENERAL | основное |
HORIZONTAL_LEFT | по левому краю |
HORIZONTAL_RIGHT | по правому краю |
HORIZONTAL_CENTER | по центру |
HORIZONTAL_CENTER_CONTINUOUS | по центру выделения |
HORIZONTAL_JUSTIFY | по ширине |
Выравнивание по вертикали
VERTICAL_BOTTOM | по нижнему краю |
VERTICAL_TOP | по верхнему краю |
VERTICAL_CENTER | по центру |
VERTICAL_JUSTIFY | по высоте |
Пример параметров настройки стилей выравнивания:
array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'rotation' => 0, 'wrap' => true, 'shrinkToFit' => false, 'indent' => 5 )
Или использовать следующие методы:
$PHPExcel_Style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$PHPExcel_Style->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_JUSTIFY);
$PHPExcel_Style->getAlignment()->setTextRotation(10);
$PHPExcel_Style->getAlignment()->setWrapText(true);
$PHPExcel_Style->getAlignment()->setShrinkToFit(false);
$PHPExcel_Style->getAlignment()->setIndent(5).
Формат представления данных
Параметр numberformat представляет собой массив, который включает только один параметр: code — формат данных ячейки.
Список возможных форматов
FORMAT_GENERAL | General |
FORMAT_TEXT | @ |
FORMAT_NUMBER | 0 |
FORMAT_NUMBER_00 | 0.00 |
FORMAT_NUMBER_COMMA_SEPARATED1 | #,##0.00 |
FORMAT_NUMBER_COMMA_SEPARATED2 | #,##0.00_- |
FORMAT_PERCENTAGE | 0% |
FORMAT_PERCENTAGE_00 | 0.00% |
FORMAT_DATE_YYYYMMDD2 | yyyy-mm-dd |
FORMAT_DATE_YYYYMMDD | yy-mm-dd |
FORMAT_DATE_DDMMYYYY | dd/mm/yy |
FORMAT_DATE_DMYSLASH | d/m/y |
FORMAT_DATE_DMYMINUS | d-m-y |
FORMAT_DATE_DMMINUS | d-m |
FORMAT_DATE_MYMINUS | m-y |
FORMAT_DATE_XLSX14 | mm-dd-yy |
FORMAT_DATE_XLSX15 | d-mmm-yy |
FORMAT_DATE_XLSX16 | d-mmm |
FORMAT_DATE_XLSX17 | mmm-yy |
FORMAT_DATE_XLSX22 | m/d/yy h:mm |
FORMAT_DATE_DATETIME | d/m/y h:mm |
FORMAT_DATE_TIME1 | h:mm AM/PM |
FORMAT_DATE_TIME2 | h:mm:ss AM/PM |
FORMAT_DATE_TIME3 | h:mm |
FORMAT_DATE_TIME4 | h:mm:ss |
FORMAT_DATE_TIME5 | mm:ss |
FORMAT_DATE_TIME6 | h:mm:ss |
FORMAT_DATE_TIME7 | i:s.S |
FORMAT_DATE_TIME8 | h:mm:ss |
FORMAT_DATE_YYYYMMDDSLASH | yy/mm/dd; @ |
FORMAT_CURRENCY_USD_SIMPLE | «$»#,##0.00_-;@ |
FORMAT_CURRENCY_USD | $#,##0_- |
FORMAT_CURRENCY_EUR_SIMPLE | [$EUR ]#,##0.00_- |
Пример настройки для формата данных ячейки:
array( 'code' => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE );
А можно и воспользоваться методом:
$PHPExcel_Style->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
Защита ячеек
В качестве значения параметра protection выступает массив, который содержит два необязательных параметра:
- locked — защитить ячейку;
- hidden — скрыть формулы.
Пример настройки параметров для защиты ячейки:
array( 'locked' => true, 'hidden' => false );
Или использовать следующие методы:
$PHPExcel_Style->getProtection()->setLocked(true);
$PHPExcel_Style->getProtection()->setHidden(false);
Теперь мы знаем, какие есть настройки стилей и какие присутствуют параметры у каждого стиля. Сейчас мы к ячейкам таблицы применим стиль оформления, но проделаем это тремя способами. Первый способ заключается в создании массива настроек, который в качестве параметра мы передадим в метод applyFromArray, класса PHPExcel_Style.
$style = array( 'font' => array( 'name' => 'Arial', ), 'fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array ( 'rgb' => 'C2FABD' ) ), 'alignment' => array ( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER ) );
Далее мы применим созданный нами стиль к ячейкам excel.
$sheet->getStyleByColumnAndRow($i - 2, $j)->applyFromArray($style);
Сейчас применим тот же стиль, но используя другую методику.
//Устанавливаем выравнивание $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Устанавливаем шрифт $sheet->getStyleByColumnAndRow($i - 2, $j)->getFont()->setName('Arial'); // Применяем заливку $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyleByColumnAndRow($i - 2, $j)->getFill()-> getStartColor()->applyFromArray(array('rgb' => 'C2FABD'));
Вот что у нас получилось:
Если требуется применять стиль многократно, то лучше подойдет первый метод, в другом же случае, лучше остановиться на втором. Для получения объекта (экземпляр класса PHPExcel_Style) ячейки отвечающего за стиль, необходимо использовать один из следующих методов:
- getStyleByColumnAndRow([$pColumn = 0 [, $pRow = 1]]) – применяется если требуется обратиться к ячейке по числовым координатам. Методу необходимо передать два параметра в виде номеров столбца и строки ячейки;
- getStyle([pCellCoordinate = ‘A1’]) – используется для обращения по строковой координате ячейки. Методу требуется передать один параметр, это строковое представление координаты.
А теперь рассмотрим третий способ назначения стиля ячейкам путем дублирования стиля. Пример использования представлен ниже (предполагается, что к ячейке “B2” применен некий стиль и мы его хотим продублировать для диапазона ячеек “F2:F10”):
$sheet->duplicateStyle($sheet->getStyle('B2'), 'F2:F10');
Добавление комментариев
Я думаю, что не часто кто-то пользуется возможностью добавления комментариев к ячейкам, но это сугубо мое личное мнение, однако такая возможность имеется. Добавить комментарий к ячейке довольно просто, что видно из примера ниже:
... // Стили шрифтов $fBold = array('name' => 'Tahoma', 'size' => 10, 'bold' => true); $fNormal = array('name' => 'Tahoma', 'size' => 10); $richText = $sheet->getComment('B2')->getText(); $richText->createTextRun("Lorem ipsum ")->getFont()-> applyFromArray($fNormal); $richText->createTextRun("dolor sit")->getFont()-> applyFromArray($fBold); $richText->createTextRun(" amet consectetuer")->getFont()-> applyFromArray($fNormal); // Ширина поля комментария $sheet->getComment('B2')->setWidth('250'); // Высота поля комментария $sheet->getComment('B2')->setHeight('25'); ...
Следует заметить, что при повторном вызове метода createTextRun() новый комментарий добавится к уже существующему, а не заменит его. Следует отметить, что данный метод возвращает объект класса PHPExcel_RichText_Run, у которого имеются методы для установки и получения параметров шрифта:
- getFont() – возвращает объект класса для работы со шрифтами PHPExcel_Style_Font.
- setFont([$pFont = null]))]) – данному методу требуется передать в качестве параметра объект класса PHPExcel_Style_Font.
Вот какой комментарий мы должны получить:
Вставка ссылки
Вставка ссылок в ячейку тоже не вызывает каких-либо затруднений, что можно видеть из нижеописанного примера:
... // Ссылка на веб-ресурс $sheet->getCell('A2')->getHyperlink()->setUrl('http://www.phpexcel.net'); // Ссылка на ячейку листа с названием Sheet2 $sheet->getCell('A2')->getHyperlink()->setUrl("sheet://'Sheet2'!D5"); ...
Так же в виде ссылки может быть использован, к примеру, email адрес: mailto:example@mail.com.
Чтение данных из Excel
Формировать отчеты и применять к ним стили это конечно отлично. Но на этом возможности библиотеки PHPExcel не заканчиваются. Ну что же, посмотрим на что она еще способна. А способна она еще и читать данные из файлов формата *.xls / *.xlsx.
С помощью библиотеки PHPExcel можно читать следующие форматы:
- Excel 2007;
- Excel 5.0/Excel 95;
- Excel 97 и поздние версии;
- PHPExcel Serialized Spreadshet;
- Symbolic Link;
- CSV.
Для работы нам понадобятся объекты двух классов:
- PHPExcel_Worksheet_RowIterator – используется для перебора строк;
- PHPExcel_Worksheet_CellIterator – используется для перебора ячеек.
Для демонстрации выведем данные из таблицы с информацией об автомобилях.
Пример чтения файла представлен ниже:
require_once ('PHPExcel/IOFactory.php'); // Открываем файл $xls = PHPExcel_IOFactory::load('xls.xls'); // Устанавливаем индекс активного листа $xls->setActiveSheetIndex(0); // Получаем активный лист $sheet = $xls->getActiveSheet();
Первый вариант
... echo "<table>"; // Получили строки и обойдем их в цикле $rowIterator = $sheet->getRowIterator(); foreach ($rowIterator as $row) { // Получили ячейки текущей строки и обойдем их в цикле $cellIterator = $row->getCellIterator(); echo "<tr>"; foreach ($cellIterator as $cell) { echo "<td>" . $cell->getCalculatedValue() . "</td>"; } echo "</tr>"; } echo "</table>";
Второй вариант
... echo "<table>"; for ($i = 1; $i <= $sheet->getHighestRow(); $i++) { echo "<tr>"; $nColumn = PHPExcel_Cell::columnIndexFromString( $sheet->getHighestColumn()); for ($j = 0; $j < $nColumn; $j++) { $value = $sheet->getCellByColumnAndRow($j, $i)->getValue(); echo "<td>$value</td>"; } echo "</tr>"; } echo "</table>";
В первом варианте мы производим чтение данных, из ячеек используя итераторы. А во втором, мы используем индексную адресацию для обращения и получения данных из ячеек листа. Получить данные о количестве строк и столбцов, можно воспользовавшись следующими методами класса PHPExcel_Worksheet:
- getHighestColumn() – возвращает символьное представление последнего занятого столбца в активном листе. Обратите внимание: не индекс столбца, а его символьное представление (A, F и т.д.);
- getHighestRow() – возвращает количество занятых строк в активном листе.
Другие полезные методы
Возможностей по работе с отчетами формата excel с использованием PHP как мы видим, достаточно много. Но мы рассмотрим еще несколько полезных методов, которые могут оказаться весьма полезны в работе:
- getMergeCells() – с помощью данного метода принадлежащего классу PHPExcel_Worksheet можно получить информацию обо всех объединенных ячейках в листе;
- setPreCalculateFormulas([$pCellStyle = true]) – данный метод необходимо использовать если требуется произвести расчет формул в листе (он имеется у двух классов: PHPExcel_Writer_Excel5 и PHPExcel_Writer_Excel2007). В рассматриваемый метод передается параметр типа boolean: true или false (если передать значение true, то расчет формул произойдет перед сохранением файла автоматически, иначе расчета формул не последует). Использование данного метода может оказаться полезным если созданный файл потребуется загрузить, к примеру на Google Drive. Ведь в таком случае расчет формул не будет произведен автоматически указанным сервисом и здесь вся ответственность ложиться на нас;
- stringFromColumnIndex([$pColumnIndex = 0]) – данный метод позволяет определить по номеру столбца его символьное представление, для этого в качестве параметра необходимо передать его номер;
- columnIndexFromString([$pString = ‘A’]) – с помощью данного метода можно определить номер столбца по его символьному представлению, для этого в качестве единственного параметра необходимо передать его обозначение.
Примечание: Методы stringFromColumnIndex и columnIndexFromString примечательны тем, что их можно использовать без создания объекта класса. Пример использования представлен ниже:
PHPExcel_Cell::stringFromColumnIndex(15); PHPExcel_Cell::columnIndexFromString('A1');
С помощью продемонстрированных возможностей, можно формировать и считывать любые отчеты в виде файлов, формата excel. А также были продемонстрированы почти все возможные методы для работы со стилями.
swblog.ru