Php экспорт в excel: Обработка и оформление отчетов в Excel на PHP / Хабр
Экспорт в Excel просто, быстро и красиво | by Удальцов Валентин | Пых / PHPYH
Интеграция «
в лоб»
Вот как может выглядеть черновой экшн для выгрузки отчёта, сделанный по документации Box Spout и Symfony HttpFoundation:
Экшн для выгрузки отчёта, сделанный “в лоб”
Оптимизация
Что тут можно оптимизировать? Временный файл кажется лишним. Если Spout умеет писать построчно в файл, значит может стримить и напрямую в буфер!
Альтернативная реализация экшна с использованием StreamedResponse
Рефакторинг
А теперь вооружимся SOLID и сделаем этот код переиспользуемым в рамках конкретного приложения. Но не будем оверинжинирить —проектный инструмент должен получиться простым и гибким ровно настолько, насколько этого требуют юзкейсы. Рассмотрим Excel выгрузки Happy Job:
- всегда используется формат
xlsx
; - содержимое таблиц нетиповое, нужен полный контроль над листами, строками и ячейками;
- один экшн— один файл.
Получается, что относительно примера выше в нашем приложении код будет варьироваться только в строках 28–33. Всё остальное можно вынести в сервис.
Самый простой и универсальный способ внедрить кусок кода в середину метода? Аргумент типа callable
!
Фабрика генерации ответа сервера в формате Excel
Обратите внимание, что тип возвращаемого значения Response
, а не StreamedResponse
. Так мы скрыли подробности реализации и объявили более универсальный контракт. Если в будущем нам потребуется несколько реализаций фабрики, достаточно будет сделать ExcelResponseFactory
интерфейсом, и всё уже будет готово для полиморфизма без правки сигнатур и клиентского кода (экшнов).
Экшн, использующий новую фабрику
Иногда код, наполняющий $writer
данными, оказывается слишком сложным для замыкания. В таких случаях его можно вынести в отдельный класс с методом __invoke
. В этом для меня состоит главное преимущество callable
перед интерфейсом при организации простых точек расширения.
Юнит-тесты для фабрики. На мой взгляд, testResponseContent
сложноват. Если есть идеи, как оформить его изящнее, пишите в комментариях.
Импорт из Excel в MySQL
Мне не однократно приходилось решать задачи, связанные с импортом данных из файлов электронных таблиц Excel (xls и xlsx) в Базу данных сайта, а также экспортом определенных данных обратно в Excel или CSV. В основном, импортировалась информация о товарах и заказах.
Наиболее универсальные решения представлены ниже. Вы можете приобрести компоненты импорта для таких популярных компонентов интернет-магазина как VirtueMart, JoomShopping и J2Store.
Цена: 30 USD
Купить
Excel2JS — это расширенный импорт и экспорт товаров из Excel, YML и VK в JoomShopping. Этот компонент позволит облегчить управление магазином на базе компонента JoomShopping (Joomla 2.5.6 — 3.9). С его помощью Вы сможете наполнять магазин, используя непосредственно Excel прайсы или YML-файлы поставщиков.
Полная Инструкция по настройке компонента
Цена: 30 USD
Купить
Excel2VM — это гибкий компонент для интернет-магазина VirtueMart 3, который позволяет упросить импорт и экспорт товаров из Excel, CSV, XML и YML. Этот компонент подойдет для владельцев и менеджеров магазинов сделанных на Joomla 2.5.6 — 3.9. С его помощью Вы сможете наполнять магазин, используя непосредственно Excel (или CSV) прайсы или YML-файлы поставщиков.
Также импорт товаров можно осуществлять из XML-файлов, которые не соответствуют стандартам Яндекс.Маркет. Для этого можно настроить, из каких тэгов будет импортирована информация в какие поля товара.
При покупке компонента Вы получаете также подписку на обновления и тех. поддержку сроком на 6 месяцев. В пакет тех. поддержки входит помощь в установке и настройке компонента, создание профилей настроек для 1-2 прайсов, консультации, помощь в устранении проблем, связанных с особенностями Вашего сервера.
Полная Инструкция по настройке компонента
Цена: 30 USD
Купить
Для набирающего популярность компонента Joomla интернет-магазина J2Store разработан компонент — «Xls2Store — XLS Импорт/экспорт товаров в J2Store«. C помощью данного компонента Вы можете в десятки раз ускорить наполнение магазина товарами, упростить изменение цен и дополнительных атрибутов, т.к. компонент позволит Вам несколько тысяч товаров в свой магазин на J2Store в течение минуты.
Создан компонент для Joomla 1.5, с помощью которого можно легко осуществить импорт данных из Excel в любую таблицу вашей базы данных на MySQL. Импорт осуществляется в 2 клика! В настройках компонента необходимо выбрать из выпадающего списка таблицу, а затем — чекбоксами отметить поля, в которые будет произведён импорт.
После сохранения настроек нужно перейти на вкладку «Импорт», где будет указана целевая таблица и подсказка о том, как нужно расположить столбцы Excel-файла. Доступно 2 метода импорта:
- Вставка новых записей с перезаписью крнфликтующих строк. Опционально перед импортом можно очистить таблицу.
- Обновление существующих записей — этот метод полезен тогда, когда вам нужно обновить лишь несколько полей таблицы MySQL, а остальные поля оставить без изменений. При выборе этого метода, появится список полей, одно из которых должно быть ключевым (обычно это поле id).
Используется библиотека ExelReader.
Создан админский модуль, с помощью которого можно осуществить импорт товаров из прайса Excel в VirtueMart без пересохранения файла в CSV! Импорт осуществляется в 2 клика! В параметрах модуля необходимо указать номера столбцов прайса, которые соответствуют полям VirtueMart. При правильной разметке прайса (см. вложения: Образец прайса) модуль автоматически создаёт иерархическое дерево разделов, категорий и подкатегорий. Нет ограничений на количество уровней вложенности. После чего в соответствующие категории вносятся товары. Используется библиотека ExelReader.
Модуль умеет работать с типами товаров, а также пакетно создавать уменьшенные изображения товаров по заданным параметрам.
NEW! Внимание! Доступен компонент «Импорт товаров из Excel в VirtueMart 2 — 3» для Joomla 2.5 — 3.x!
NEW! Внимание! Для Joomla 1.5 и VirtueMart 1.1.9 доступен компонент с графическим интерфейсом настройки расположения столбцов в прайсе и функцией экспорта — Компонент импорта/экспорта товаров из Excel в VirtueMart 1.x
Файл | Описание | Размер файла: |
---|---|---|
Образец прайса | Таким образом должен быть организован ваш прайс для создания иерархии категорий. | 30 Кб |
Инструкция к модулю | Перед заказом модуля ОБЯЗАТЕЛЬНО ознакомьтесь с инструкцией | 56 Кб |
Создан админский модуль, основной функцией которого является импорт данных из файла Excel в базу MySQL. Есть возможность автоматически создавать таблицы с заданными параметрами. Модуль использует библиотеку ExelReader.
Экспорт данных в эксель wordpress
if (isset($_GET[‘excel-export’])) {
if (current_user_can(‘manage_options’)) {
add_action(‘init’, function () {
error_reporting(E_ALL);
if (PHP_SAPI == ‘cli’)
die(‘This example should only be run from a Web Browser’);
require_once ‘Classes/PHPExcel.php’;
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setTitle(esc_html__(‘Results’, ‘mytheme’));
$objPHPExcel->getProperties()->setSubject(esc_html__(‘Results’, ‘mytheme’));
$objPHPExcel->getProperties()->setDescription(esc_html__(‘Export users document for XLSX. ‘, ‘mytheme’));
// WP_User_Query получаем пользователей по заданым критериям
$args02 = array(
‘role’ => ‘subscriber’,
‘order’ => ‘ASC’,
‘orderby’ => ‘display_name’,
‘fields’ => ‘all’,
);
// The User Query
$blogusers02 = get_users($args02);
$cell_counter = 1;
// Закрашиваем фон у наших заголовков
$objPHPExcel->getActiveSheet()->getStyle(‘A1:AM1’)->getFill()
->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
->getStartColor()->setARGB(‘a5b6ca’);
// Подписываем столбцы
$objPHPExcel->getActiveSheet()->SetCellValue(‘A1’, esc_html__(‘Name’, ‘mytheme’));
$objPHPExcel->getActiveSheet()->SetCellValue(‘B1’, esc_html__(‘E-mail’, ‘mytheme’));
$objPHPExcel->getActiveSheet()->SetCellValue(‘C1’, esc_html__(‘Profession’, ‘mytheme’));
$objPHPExcel->getActiveSheet()->SetCellValue(‘D1’, esc_html__(‘Role’, ‘mytheme’));
$objPHPExcel->getActiveSheet()->SetCellValue(‘E1’, esc_html__(‘Description’, ‘mytheme’));
// Собственно сам цикл:
foreach ($blogusers02 as $user) {
$cell_counter++; // Счетчик, он нужен для того чтобы был переход на следующую строку
$meta = get_user_meta($user->ID);
// Выборка данных с стандартных полей
$role = $user->roles;
$email = $user->user_email;
// Выборка данных с кастомных полей
$first_name = (isset($meta[‘user_first_name’][0]) && $meta[‘user_first_name’][0] != ») ? $meta[‘user_first_name’][0] : »;
$profession = (isset($meta[‘user_profession’][0]) && $meta[‘user_profession’][0] != ») ? $meta[‘user_profession’][0] : »;
$description = (isset($meta[‘user_description’][0]) && $meta[‘user_description’][0] != ») ? $meta[‘user_description’][0] : »;
// Заполняем ячейки таблицы
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue(‘A’ . $cell_counter . », $first_name);
$objPHPExcel->getActiveSheet()->SetCellValue(‘B’ . $cell_counter . », $email);
$objPHPExcel->getActiveSheet()->SetCellValue(‘C’ . $cell_counter . », $profession);
$objPHPExcel->getActiveSheet()->SetCellValue(‘D’ . $cell_counter . », $description);
}
// Устанавливаем автоматическую ширину для ячеек
for ($col = ‘A’; $col !== ‘D’; $col++) {
$objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}
// Даем имя вкладке
$objPHPExcel->getActiveSheet()->setTitle(esc_html__(‘Results’, ‘mytheme’));
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename=»SbmChampions2019Survey.xlsx»‘);
header(‘Cache-Control: max-age=0’);
// Сохраняем файл
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
$objWriter->save(‘php://output’);
exit();
});
}
}
5 библиотек, которые помогут вам создавать отчеты Excel в приложении PHP
Microsoft Excel по-прежнему является наиболее широко используемым инструментом для анализа данных и создания отчетов. Если вы когда-либо работали над каким-либо корпоративным приложением, вы, должно быть, сталкивались с требованием наличия возможности экспорта в Excel для различных отчетов, доступных в вашем приложении.
Сегодня мы рассмотрим различные варианты, доступные разработчикам PHP для экспорта данных в электронные таблицы Excel.
1.
PHPExcel
- Лучшая в своем классе из имеющихся опций. Ухоженный и активный общественный проект.
- Поддерживает изображения, диаграммы, формулы, несколько листов.
- Extendable: поддерживает экспорт в pdf / doc или любой другой формат, который вам может понравиться. Вы можете расширить класс записи вывода и использовать любой нужный вам формат.
- Документация исчерпывающая и понятная даже для начинающих программистов на php.
- Может загружать существующие файлы Excel и использовать их в качестве базового шаблона для заполнения данных.
- Также поддерживает форматы openXML, используемые Open office или MS office 2007 или новее.
2. php-excel
- Облегченная библиотека с минимальной функциональностью, необходимой для экспорта только простого файла Excel с данными.
- Подходит для простого экспорта данных, требующего наличия одного рабочего листа в файле Excel.
- выдаст предупреждение о том, что файл может иметь неправильный формат для пользователя перед открытием файла.
- Поддерживает вывод только в браузер.
- Нет поддержки формул, изображений, диаграмм и т. Д.
MS Office 2007 или более поздней версии
3. Экспорт данных PHP
- Построен на основе упомянутой выше библиотеки php-excel.
- Поддерживает экспорт в формат tsv / csv помимо формата xls.
- Поддерживает вывод в браузер, файл или строку.
4. Excel Writer (XML) для PHP
- Поддерживает формулы Excel.
- Поддержка нескольких листов.
- Поддержка форматирования.
- Поддерживает прямой экспорт из таблиц mysql, запросов mysql.
- Создает файлы в формате Microsoft Office 2003 XML, который правильно открывается в Microsoft Excel, но расширение файла может сбить с толку пользователей.
5. Устройство записи Excel для груши
- Поддерживает формулы и изображения.
- Подставка для нескольких листов
- Поддержка форматирования.
- Может быть сгенерирован только формат BIFF, то есть .xls. Нет поддержки новых форматов.
Использовали ли вы какую-либо из этих или других библиотек для экспорта данных в формате Excel из приложения php? Если да, поделитесь ими в комментариях ниже.
Экспорт данных в excel с использованием php и cakephp
Это простое руководство принадлежит новичку php и cakephp разработчику. Здесь я расскажу вам простейший трюк для экспорта ваших данных mysql в excel / csv. Каждый раз, когда нам это нужно при создании отчетов, поэтому это простейшая строка кода, чтобы сделать это. Но если вам нужно больше настраивать отчет, вы должны использовать любой сторонний плагин для создания отчетов, который обеспечивает большую гибкость для создания отчетов.
Теперь сначала я расскажу, как это сделать в core php, почти такая же строка кода будет следовать в cakephp.
Method-1
Создайте в php функцию с именем exportInExcel ()
Php функция exportInExcel ($ fileName, $ headerRow, $ data) { ini_set ('max_execution_time', 1600); // увеличиваем max_execution_time до 10 мин, если набор данных очень большой $ fileContent = implode ("\ t", $ headerRow). "\ n"; foreach ($ data as $ result) { $ fileContent. = implode ("\ t", $ result). "\ n"; } заголовок ('Content-type: application / ms-excel'); /// вы можете установить формат csv заголовок ('Content-Disposition: attachment; filename ='.$ fileName); echo $ fileContent; выход; } ?> |
Теперь вызовите эту функцию там, где вы хотите экспортировать данные в Excel ..
Предположим, у нас есть таблица книг, и нам нужно экспортировать из базы данных mysql в Excel.
Php $ fileName = "bookreport _". date ("д-м-г: ч: с"). ". xls"; // $ fileName = "bookreport _". date ("д-м-г: ч: с"). ". csv"; $ headerRow = array ("Название книги", "Номер ISBN", "Автор"); $ data = массив ( array ('Название книги1', '1111111111', 'Рохит Кумар-1'), array ('Название книги2', '2222222222', 'Рохит Кумар-2'), array ('Название книги3', '3333333333', 'Рохит Кумар-3'), array ('Название книги4', '4444444444', 'Рохит Кумар-4') ); exportInExcel ($ fileName, $ headerRow, $ data); ?> |
Примечание: если значения $ data берутся из базы данных, необходимо убедиться, что массив должен быть таким же, как вы видели в примере.
Method-2
В этом методе мы создали простой php-класс для экспорта mysql в csv через PHP. Таким образом, вы можете добавить этот простой класс в свой проект и использовать этот класс для простого экспорта данных MySql в формате Excel CSV.
Класс PHP — экспорт данных MYSQL в CSV с использованием PHP
Php class H_Mysql_Export { общедоступный $ headerAry = array (); общедоступные $ dataAry = array (); общедоступный каталог $ = './'; общедоступное $ filename = 'h_export_'; общедоступный $ filepath = ''; public function init () { $ this-> filepath = $ this-> каталог.$ this-> filename.time (); } public function csv () { $ this-> init (); $ this-> filepath = $ this-> filepath. ". csv"; $ handle = fopen ($ this-> путь к файлу, 'w +'); fputcsv ($ handle, $ this-> headerAry); foreach ($ this-> dataAry as $ csvdata) { fputcsv ($ handle, $ csvdata); } fclose ($ handle); } public function download () { if (file_exists ($ this-> filepath)) { заголовок ('Content-Description: File Transfer'); заголовок ('Content-Type: application / octet-stream'); заголовок ('Content-Disposition: attachment; filename ='.базовое имя ($ this-> путь к файлу)); заголовок ('Content-Transfer-Encoding: двоичный'); заголовок ('Истекает: 0'); заголовок ('Cache-Control: must-revalidate'); заголовок ('Pragma: public'); заголовок ('Content-Length:'. Размер файла ($ this-> filepath)); ob_clean (); румянец(); readfile ($ this-> путь к файлу); } еще { echo $ this-> путь к файлу. ' Не существует! '; } } public function delete () { unlink ($ this-> путь к файлу); } } ?> |
Ниже мы создали простой PHP-код для экспорта статических данных в формат CSV с использованием вышеуказанного класса.
$ export = new H_Mysql_Export (); $ export-> headerAry = массив (); $ export-> dataAry = массив (); $ экспорт-> csv (); $ экспорт-> скачать (); |
Использование PHP и mysql
mysql_connect ("localhost", "root", ""); mysql_select_db ("БД"); $ query = mysql_query («ВЫБРАТЬ * ИЗ компакт-дисков»); while ($ row = mysql_fetch_assoc ($ query)) { $ data [] = $ row; } print_r ($ данные); включить ('classFile.php'); $ export = новый H_Mysql_Export (); $ export-> headerAry = array ('Заголовок', 'Интерпретировать', 'jahr', 'ID'); // ИМЕНА СТОЛБЦА ТАБЛИЦЫ $ export-> dataAry = $ данные; // МАССИВ ТАБЛИЧНЫХ ДАННЫХ ИЗ MYSQL $ export-> filename = 'Образец'; // ПОЛЬЗОВАТЕЛЬСКОЕ ИМЯ ФАЙЛА $ export-> directory = 'файлы /'; // НАЗВАНИЕ КАТАЛОГА $ экспорт-> csv (); // ИНИЦИАЛИЗАЦИЯ $ экспорт-> скачать (); // АВТОМАТИЧЕСКАЯ ЗАГРУЗКА $ экспорт-> удалить (); // АВТОМАТИЧЕСКОЕ УДАЛЕНИЕ ЗАГРУЖЕННОГО ФАЙЛА |
Метод 3: в Cakephp
Теперь давайте поговорим о cakephp, как и о core php, мы можем сделать то же самое, но здесь мы создадим компонент, который сделает это лучше.
Перейдите в приложение / Контроллер / Компонент и создайте файл с именем ExportXlsComponent.php
ExportXlsComponent.php
Php App :: uses ('Компонент', 'Контроллер'); class ExportXlsComponent расширяет Component { функция экспорта ($ fileName, $ headerRow, $ data) { ini_set ('max_execution_time', 1600); // увеличиваем max_execution_time до 10 мин, если набор данных очень большой $ fileContent = implode ("\ t", $ headerRow). "\ n"; foreach ($ data as $ result) { $ fileContent.= implode ("\ t", $ result). "\ n"; } заголовок ('Content-type: application / ms-excel'); /// вы можете установить формат csv заголовок ('Content-Disposition: attachment; filename ='. $ fileName); echo $ fileContent; выход; } ?> |
После этого вызовите этот компонент в файле контроллера, куда вы хотите экспортировать данные в Excel.
BooksController.php
Php class BooksController расширяет AppController { public $ components = array ('ExportXls'); function reports () { $ this-autoRender = false; $ this-> layout = false; $ fileName = "bookreport_".дата ("д-м-у: ч: с"). ". xls"; // $ fileName = "bookreport _". date ("д-м-г: ч: с"). ". csv"; $ headerRow = array ("Название книги", "Номер ISBN", "Автор"); $ data = массив ( array ('Название книги1', '1111111111', 'Рохит Кумар-1'), array ('Название книги2', '2222222222', 'Рохит Кумар-2'), array ('Название книги3', '3333333333', 'Рохит Кумар-3'), array ('Название книги4', '4444444444', 'Рохит Кумар-4') ); $ this-> ExportXls-> export ($ fileName, $ headerRow, $ data); } } ?> |
Спасибо 🙂
БЕСПЛАТНЫЙ PHP-скрипт: Экспорт данных MYSQL в CSV с использованием PHP
Ниже приведен список наиболее популярных вручную выбранных Экспорт данных MYSQL в CSV с использованием PHP.
Надеюсь, вам понравился Собранный вручную список из . Экспорт данных MYSQL в CSV с использованием PHP . Не забудьте на . Подпишитесь на My Public Notebook , чтобы получить более полезные. Отобранные вручную примеры кода PHP и MySql, учебные пособия и статьи.
Связанные
PHP — Экспорт базы данных MySQLi в Excel
В этом руководстве мы создадим базу данных Экспорт MySQLi в Excel с использованием PHP. PHP — это язык сценариев на стороне сервера, предназначенный в первую очередь для веб-разработки.Используя PHP, вы можете позволить своему пользователю напрямую взаимодействовать со скриптом и легко изучить его синтаксис. Он в основном используется новыми кодировщиками из-за удобной для пользователя среды. Итак, займемся кодированием.
До начала работы:
Сначала вам нужно загрузить и установить XAMPP или любой локальный сервер, на котором выполняются сценарии PHP. Вот ссылка для сервера XAMPP https://www.apachefriends.org/index.html.
И это ссылка для начальной загрузки, которая использовалась для макета https://getbootstrap.com/.
Создание базы данных
Откройте веб-сервер базы данных, затем создайте в нем имя базы данных db_excel , после этого нажмите «Импорт», затем найдите файл базы данных в папке приложения и нажмите «ОК».
Создание подключения к базе данных
Откройте любой текстовый редактор (notepadd ++ и т. Д.). Затем просто скопируйте / вставьте приведенный ниже код и назовите его conn.php .
Php
$ conn = new mysqli ('localhost', 'root', '', 'db_excel');
if (! $ Conn) {
- die («Ошибка: не удается подключиться к базе данных»);
}
?>
Создание интерфейса
Здесь мы создадим простую форму для нашего приложения.Чтобы создать формы, просто скопируйте и запишите их в текстовый редактор, а затем сохраните как index.php .
PHP - Экспорт базы данных MySQLi в Excel
php ">
Имя
Фамилия
Адрес
Работа
Php
требуется «соед.php ';
$ query = $ conn-> query ("ВЫБРАТЬ * ИЗ` member` ");
while ($ fetch = $ query-> fetch_array ()) {
?>
Php echo $ fetch ['firstname']? >
php echo $ fetch ['lastname']?>
php echo $ fetch ['address']?> < / td>
php echo $ fetch ['job']?>
php
}
?>
- 900 02
div>
2.1.min.js ">
Создание запроса PHP
Этот код содержит запрос приложения. Этот код отправит входные данные на сервер базы данных при нажатии кнопки. Для этого скопируйте и напишите этот блок кодов в текстовом редакторе и сохраните его как save_query.php .
Php
require_once 'conn.php ';
- if (ISSET ($ _ POST ['save'])) {
- if (! Empty ($ _ POST ['firstname']) &&! Empty ($ _ POST ['lastname']) &&! пусто ($ _ POST ['адрес']) &&! пусто ($ _ POST ['задание'])) {
$ firstname = $ _POST ['имя'];
$ lastname = $ _POST ['фамилия'];
$ адрес = $ _POST ['адрес'];
$ job = $ _POST ['job'];
- $ conn-> query ("INSERT INTO` member` VALUE ('', '$ firstname', '$ lastname', '$ address', '$ job') ") или die (mysqli_errno ());
- заголовок ('location: index.php ');
} else {
echo "";
echo "";
}
}
?>
Создание основной функции
Этот код содержит основную функцию приложения. Этот код будет экспортировать файл xls при нажатии кнопки.Для этого просто скопируйте и напишите этот код в текстовом редакторе, затем сохраните его как excel.php
Php
- заголовок («Content-Type: application / xls»);
- заголовок («Content-Disposition: attachment; filename = download.xls»);
require_once 'conn.php';
$ output = "";
- if (ISSET ($ _ POST ['экспорт'])) {
$ вывод.