Phpspreadsheet создать файл excel
PhpSpreadsheet Declarative - декларативное создание таблиц. Позволяет быстро и просто создавать таблицы через привязку стилей и массива данных к шаблону. Сохранение результаты в форматах xlsx, xls, pdf, html.
Используйте composer чтобы установить PhpSpreadsheet Declarative в проект:
Все примеры находятся в /examples, результаты их работы в /runtime
example01.php Быстрый старт - создание и сохранение документа
Writer::getWriter() - создание экземпляра объекта (новый xls документ) addData('users', $users)- привязка массива с данными addSheet($template) - добавление листа, в метод передается шаблон. Шаблон представляет ассоциативный массив установленного формата. sheetCaption - название листа tables - массив из шаблонов листов tables.bindTable - имя привязанного массива с данными tables.columns - массив шаблонов столбцов tables.columns.head - свойства заголовка tables.columns.body - свойства тела таблицы tables.columns.head.caption - текст в заголовке tables.columns.body.bindColumn - имя привязанного свойства из привязанного массива с данными
writeDocument($fileNameFull . '.xlsx') - сохранение документа на диск
example02.php Создание и сохранение документа в разных форматах, xlsx, xls, html, pdf(3 варианта)
writeDocument() - сохраняет документ на диск. Первым аргументом передается полный путь к файлу. По расширению файла автоматически выбирается нужный Writer. Для pdf существуют 3 Writer'а. Для кириллицы лучше всего работает MPdfWriter, он же установлен по умолчанию. Выбрать pdf-writer можно вторым аргументом функции ('m','tc','dom'). Можно сохранять несколько раз в разные форматы и между сохранениями добавлять листы.
example03.php Создание и отправка документа в браузер
sendDocument() - отправляет документ в браузер. Первым аргументом передается имя файла. По расширению файла автоматически выбирается нужный Writer и MIME-типы. После отправки происходит остановка работы.
example04.php Добавление метаданных файла
setMeta() - добавляет метаданные файла. В метод передается ассоциативный массив метаданных, в котором ключами являются названия методов Phpspreadsheet для управления метаданными.
example05.php Добавление формата листа
addSheet($template, $pageSetup) - вторым аргументом передаются настройки листа, такие же как в Phpspreadsheet
example06.php Высота строк, ширина колонок
Ширину столбца можно задать как в заголовке(рекомендуется), так и в теле tables.columns.head.width - ширина столбца(em) tables.columns.body.width - ширина столбца(em) Высота строки заголовка задаётся в tables.columns.head.height - высота строки(pt) Для установки высоты строки в теле таблицы следует определить в массиве с табличными данными специальное свойство, и указать его имя в tables.columns.body.bindHeight - имя привязанного свойства из привязанного массива с данными, который содержит высоту строки(pt)
Можно задать отступы таблицы(в количествах ячеек) tables.marginTop - отступ сверху(строк) от предыдущей таблицы tables.marginLeft - отступ слева(столбцов) от левого края документа
example08.php Добавление стилей
addStyles($styles) - Добавление стилей. $styles - представляет собой массив ключ-значение, где ключ - имя стиля, значение - массив стилей, такой же как используется в phpspreadsheet. Стили могут применяться ко всей таблице, ко всему заголовку, ко всему телу, к ячейке заголовка, к столбцу тела или к ячейке тела. Стили задаются в виде массива имен стилей(если стиль один - можно задать строкой) из привязанного массива со стилями.
tables.styles.all - стили для всей таблицы tables.styles.head - стили для всех заголовков tables.styles.body - стили для тела таблицы
tables.columns.head.styles - стили для текущего заголовка tables.columns.body.styles - стили для текущего столбца tables.columns.body.bindStyles - имя привязанного свойства из привязанного массива с данными, который содержит стили
example09.php Многострочный заголовок
Возможно сделать заголовок из нескольких строк, нужно в tables.columns.head добавить несколько значений.
example10.php Объединение ячеек
Чтобы объединить ячейки в заголовке нужно задать идентификатор в свойстве tables.columns.head.mergeId. Ячейки с одинаковым идентификатором объединятся. Чтобы объединить ячейки в теле нужно задать tables.columns.body.bindMerge - имя привязанного свойства из привязанного массива с данными, который содержит идентификатор объединения
example11.php Добавление картинок, нет заголовка таблицы, пропуск столбцов
tables.columns.body.bindImage - имя привязанного свойства из привязанного массива с данными, который содержит настройки для Drawing. Можно задавать все параметры, характерные для Drawing, а также гиперссылку Hyperlink. В свойстве Path задаётся путь к картинке, на диске или url.
Для добавления гиперссылке в заголовке нужно добавить tables.columns.head.href В теле tables.columns.body.href - имя привязанного свойства из привязанного массива с данными, который содержит url для гиперссылки
example13.php Применение фильтров
Пока доступен только thousands - разделитель тысяч. tables.columns.head.filters tables.columns.body.filters
example14.php Несколько листов
Для добавления нескольких листов нужно несколько раз вызвать addSheet()
example15.php Несколько таблиц
Для добавления нескольких таблиц на одном листе нужно в tables добавить несколько элементов
example16.php Имитация заполнения статическими данными без привязки к таблицам
Если требуется добавить статические данные можно просто сделать заголовок таблицы без тела
example17.php Доступ к объекту Spreadsheet и редактирование его напрямую
getDocument() - Возвращает объект Spreadsheet для возможности вносить в него правки напрямую
example18.php Генерация сложного документа(демонстрация почти всех возможностей библиотеки)
В данном примере показана работа почти всех описываемых возможностей вместе.
getWriter() - Инициализирует и возвращает экземпляр данного класса
setMeta($meta) - Устанавливает метаданные документа
addData($name, $array) - Добавляет массив из которого впоследствии будет сформировано тело таблицы
addDatas($array) - Обертка над addData, чтоб можно было одним массивом добавить несколько массивов данных
addStyle($name, $array) - Добавляет массива со стилями из которого впоследствии будут браться стили
addStyles($array) - Обертка над addStyle, чтоб можно было одним массивом добавить несколько массивов стилей
addSheet($template, $setup) - Добавляет лист к документу. В переданном шаблоне установлены связи со стилями и данными, по этому шаблону строится лист
getDocument() - Возвращает объект Spreadsheet для возможности вносить в него правки напрямую
writeDocument($pFilename, $pdfType) - Сохраняет файл на диск
sendDocument($filename, $pdfType) - Отсылает файл в браузер
tables - массив из шаблонов листов tables.bindTable - имя привязанного массива с данными tables.marginTop - отступ сверху(строк) от предыдущей таблицы tables.marginLeft - отступ слева(столбцов) от левого края документа tables.styles.all - стили для всей таблицы tables.styles.head - стили для всех заголовков tables.styles.body - стили для тела таблицы
tables.columns - массив шаблонов столбцов tables.columns.head - свойства заголовка tables.columns.head.caption - текст в заголовке tables.columns.head.width - ширина столбца(em) tables.columns.head.height - высота строки(pt) tables.columns.head.styles - стили для текущего заголовка tables.columns.head.mergeId - идентификатор объединения ячеек tables.columns.head.href - url для гиперссылки tables.columns.head.filters - фильтр(пока доступен только thousands - разделитель тысяч)
tables.columns.body - свойства тела таблицы tables.columns.body.bindColumn - имя привязанного свойства из привязанного массива с данными tables.columns.body.width - ширина столбца(em) tables.columns.body.bindHeight - имя привязанного свойства из привязанного массива с данными, который содержит высоту строки(pt) tables.columns.body.styles - стили для текущего столбца tables.columns.body.bindStyles - имя привязанного свойства из привязанного массива с данными, который содержит стили tables.columns.body.bindMerge - имя привязанного свойства из привязанного массива с данными, который содержит идентификатор объединения tables.columns.body.bindImage - имя привязанного свойства из привязанного массива с данными, который содержит настройки для Drawing. tables.columns.body.href - имя привязанного свойства из привязанного массива с данными, который содержит url для гиперссылки tables.columns.body.filters - фильтр(пока доступен только thousands - разделитель тысяч)
В данной статье я бы хотел рассмотреть библиотеку, которая позволяет создавать файлы формата xls и xlsx. Библиотека PhpSpreadsheet является по сути продолжением популярной библиотеки PHPExcel и разрабатывается теми же разработчиками, которые сделали PHPExcel , и, поскольку PHPExcel больше не поддерживается, использовать я буду именно PhpSpreadsheet.
Установка PhpSpreadsheet и требования
Прежде чем начать установку убедитесь, что у вас установлен composer (более подробно про установку composer можно прочесть здесь), а также установлена версия PHP не ниже 7.1. Затем для установки библиотеки выполняем следующую команду:
composer require phpoffice/phpspreadsheet
После того, как composer установит библиотеку и все ее зависимости можно приступать к формированию excel файлов.
Работа с библиотекой, запись данных и создание xlsx файлов
В рамках данной статьи мы познакомимся с некоторыми основными возможностями библиотеки, для более детального ее изучения можно ознакомиться с примерами, которые расположены в папке samples самой библиотеки.
Самый простой пример создания файла может выглядеть следующим образом:
Чтобы создать файл с расширением xls, а не xlsx, достаточно заменить класс Xlsx на Xls и изменить расширение в названии создаваемого файла.
Если при открытии файла с расширением xls возникают ошибки, необходимо проверить в настройках PHP параметр mbstring.func_overload. Для корректной работы библиотеки с расширением файлов xls необходимо, чтобы он был установлен в mbstring.func_overload = 0.
Установка стилей ячеек
Для установки стилей ячеек проще всего использовать метод applyFromArray, который принимает массив параметров. С его помощью можно задать шрифт, цвет текста, границы, выравнивание текста и другие параметры:
Исключение обработано просто для демонстрации в случае, если не удастся создать файл.
Установка размеров и объединение ячеек
Высота и ширина устанавливается на строку и столбец соответственно. Для установки высоты используется метод setRowHeight, а для установки ширины метод setWidth. Чтобы объединить несколько ячеек необходимо использовать метод mergeCells:
Как видно из примера для установки высоты и ширины предварительно необходимо вызвать вспомогательные методы getColumnDimension и getRowDimension.
Добавление картинок
Для добавления картинок используется класс Drawing:
Помимо тех возможностей, что используются в примере, также можно задавать тени у картинок, вращать их и т.д. Более подробно можно обратиться к примерам библиотеки. Также стоит отметить, что путь до файла с картинкой необходимо задавать относительно сервера на котором запускается скрипт создания ваших таблиц. Указать путь в виде ссылки на сторонний ресурс не удастся (на сколько мне известно), для этого сначала необходимо скачать данную картинку на ваш сервер и только потом указывать путь до картинки относительно текущего сервера.
Арифметические операции
В библиотеке доступно большое количество операций для выполнения расчетов, таких как: нахождение суммы чисел, нахождение среднего значения, взятие максимального и минимального числа и многие другие вычисления. В примере ниже показано, как вычислить сумму чисел, среднее значение и нахождение максимального из чисел:
Узнать более подробно о всех возможных операциях можно из примеров библиотеки.
Резюме
Создание файлов для excel на php не является такой сложной процедурой благодаря данной библиотеке. В ней доступно большое количество необходимых возможностей, которых должно быть достаточно для генерация различного рода отчетов и документов. Для более старых версий PHP можно использовать предыдущую версию данной библиотеки PHPExcel. Также хотел отметить, что при использовании PhpSpreadsheet были случаи, когда с помощью метода save класса Xlsx не удавалось сохранять файл в выходной буфер php://output, как правило эта ошибка связана с ограниченным доступом к временной папке. Для решения данной проблемы я сохранял файл в папку на сервере, а потом с помощью функции readfile отправлял его в буфер вывода.
PhpSpreadsheet is a library written in pure PHP and offers a set of classes that allow you to read and write various spreadsheet file formats such as Excel and LibreOffice Calc.
File formats supported
Format | Reading | Writing |
---|---|---|
Open Document Format/OASIS (.ods) | ✓ | ✓ |
Office Open XML (.xlsx) Excel 2007 and above | ✓ | ✓ |
BIFF 8 (.xls) Excel 97 and above | ✓ | ✓ |
BIFF 5 (.xls) Excel 95 | ✓ | |
SpreadsheetML (.xml) Excel 2003 | ✓ | |
Gnumeric | ✓ | |
HTML | ✓ | ✓ |
SYLK | ✓ | |
CSV | ✓ | ✓ |
PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately) | ✓ |
Software requirements
PHP version 7.3 or newer to develop using PhpSpreadsheet. Other requirements, such as PHP extensions, are enforced by composer. See the require section of the composer.json file for details.
PHP version support
Support for PHP versions will only be maintained for a period of six months beyond the end of life of that PHP version.
Installation
Use composer to install PhpSpreadsheet into your project:
Or also download the documentation and samples if you plan to use them:
Hello World
This would be the simplest way to write a spreadsheet:
Learn by example
A good way to get started is to run some of the samples. Don't forget to download them via --prefer-source composer flag. And then serve them via PHP built-in webserver:
Excel - один из самых популярных форматов обмена данными в структурированном виде. Поэтому неудивительно, что в PHP есть библиотеки, которые позволяют работать с этим форматом. Одной из таких библиотек и является PhpSpreadsheet, пример с которой я Вам далее и покажу:
Для начала необходимо установить библиотеку. Для этого в консоли выполните следующее:
C:/> composer require phpoffice/phpspreadsheet
Обратите внимание, что для функционирования библиотеки потребуется чтобы были активированы модули PHP: gd и zip.
После установки библиотеки, создайте файле test1.php и пропишите в нем следующее:
// автозагрузчик Composer
require __DIR__ . '/../vendor/autoload.php';
// импортируем необходимые классы
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// создаем книгу
$spreadsheet = new Spreadsheet();
// получаем активный лист
$sheet = $spreadsheet->getActiveSheet();
// тестовые данные: номер ячейки - строка данных
$data = [
'B1' => 'Hello, PhpSpredsheet!',
'B2' => 'Hello, Myrusakov!',
'B3' => 'Open please, this message'
];
foreach($data as $cell => $value)
// заполняем ячейки листа значениями
$sheet->setCellValue($cell, $value);
>
// пишем файл в формат Excel
$writer = new Xlsx($spreadsheet);
$writer->save('src/report.xlsx');
Как видите с помощью данной библиотеки нет особой сложности в создании *Excel-файлов. Конечно, это далеко-далеко не все возможности библиотеки, но о других возможностях мы поговорим в следующих статьях.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Итак, для начала установим саму библиотеку PHPSpreadsheet:
$ composer require phpoffice/phpspreadsheet
Затем создадим файл script.php со следующим содержимым:
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
const REPORT_FILE_NAME = "отчет_по_закупкам.xlsx";
if (isset($_GET['report'])) // (1) создаем новую книгу
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// (2) здесь генерируется отчет
$sheet->setCellValue('A1', 'Отчет сформирован');
// (3) а здесь заголовки отправляются в браузер
$writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // формат файла
header('Content-Disposition: attachment;filename="' . REPORT_FILE_NAME .'"'); // название файла при загрзуке
header('Cache-Control: max-age=0');
header('Expires: Fri, 12 Nov 2012 12:11:22 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: cache, must-revalidate');
header('Pragma: public');
$writer->save('php://output'); // отправляем в браузер;
>
Запустим пример на локальном сервере:
$ php -S localhost:9999 script.php
При нажатии на ссылку, PHP-скрипт динамически формирует Excel-таблицу и отправляет ее на загрузку в браузер. Пользователю лишь остается открыть файл.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 2 ):
Спасибо за статью. А есть ли вариант онлайн эксель документ редактировать как аналог гугл таблиц?.
Здравствуйте. Для этого надо распарсить и загрузить Excel в окно браузера. Редактирование будет осуществляться средствами JavaScript, полученный результат отправлять на сервер, к примеру, для сохранения и последующей загрузки пользователем
Читайте также: