Инструменты пользователя

Инструменты сайта


php_generacija_otchetov

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

php_generacija_otchetov [2019/01/04 16:44]
php_generacija_otchetov [2020/06/13 13:46] (текущий)
Строка 1: Строка 1:
 +====== PHP - генерация отчетов ======
 +{{htmlmetatags>
 +metatag-description=(PHPExcel – библиотека, предназначенная для обработки данных формата MS Excel.)
 +}}
 +{{ ::phpexcel_01.png?nolink |}}
 +====== Экспорт в MS Excel ======
 +В [[PHP]] существует несколько библиотек облегчающих генерацию отчетов в формат файла .xlsx (нового формата MS Excel начиная с версии 2007):
 +  * [[http://pear.php.net/package/Spreadsheet_Excel_Writer|Spreadsheet_Excel_Writer]]
 +
 +===== PHPExcel =====
 +  * Homepage: [[https://github.com/PHPOffice/PHPExcel|PHPExcel - OpenXML - Create Excel2007 documents in PHP - Spreadsheet engine]].
 +
 +
 +Библиотека очень хорошо документирована, на сайте достаточное количество разнообразные примеров. Некоторые возможности библиотеки PHPExcel:
 +  - Установка размеров ячеек
 +  - Цвет текста
 +  - Размеры текста
 +  - Шрифты
 +  - Заливка цветом области
 +  - Рамки
 +  - Работа с разными листами
 +  - Вставка в ячейки формул
 +  - Вставка в ячейки активных (кликабельных) ссылок
 +
 +<note>PHPExcel [[http://phpexcel.codeplex.com/discussions/57931|не умеет сортировать в документе Excel]]. Любые сортировки должны быть сделаны средствами [[PHP]], до создания файла.</note>
 +
 +  * **Пример**. Генерация документа с двумя листами, заполнение его содержимым. Созданный файл предлагается клиенту сохранить. После сохранения файл у пользователя, файл на сервере удаляется.<file>
 +<?php
 +error_reporting(E_ALL);
 +include 'PHPExcel.php';
 +include 'PHPExcel/Writer/Excel2007.php';
 +
 +// Create new PHPExcel object
 +echo date('H:i:s') . " Create new PHPExcel object\n";
 +$objPHPExcel = new PHPExcel();
 +
 +// Установить свойства документа. Видны в Office 2010  (в LibreOffice эти свойства не видны)
 +$objPHPExcel->getProperties()->setCreator(""); // Автор
 +$objPHPExcel->getProperties()->setLastModifiedBy("");
 +$objPHPExcel->getProperties()->setTitle("LCR"); // Название
 +$objPHPExcel->getProperties()->setSubject("Office 2007"); // Тема 
 +$objPHPExcel->getProperties()->setDescription("LCR"); // Примечания
 +
 +
 +// Add some data
 +echo date('H:i:s') . " Add some data\n";
 +$objPHPExcel->setActiveSheetIndex(0);
 +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
 +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
 +$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
 +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
 +
 +// Rename sheet
 +echo date('H:i:s') . " Rename sheet\n";
 +$objPHPExcel->getActiveSheet()->setTitle('LCR');
 +
 +// Create a new worksheet, after the default sheet
 +echo date('H:i:s') . " Create new Worksheet object\n";
 +$objPHPExcel->createSheet();
 +$objPHPExcel->setActiveSheetIndex(1);
 +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Code');
 +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Destination!');
 +// Rename sheet
 +echo date('H:i:s') . " Rename sheet\n";
 +$objPHPExcel->getActiveSheet()->setTitle('Code');
 +
 +// Save Excel 2007 file
 +$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 +//$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
 +
 +$objWriter->save('cdr.xlsx');
 +$file = "cdr.xlsx";
 +
 +if (file_exists($file)) {
 +    // redirect output to client browser 
 +    header('Content-Description: File Transfer');
 +    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
 +    header('Content-Disposition: attachment; filename='.basename($file));
 +    header('Content-Transfer-Encoding: binary');
 +    header('Expires: 0');
 +    header('Cache-Control: must-revalidate');
 +    header('Pragma: public');
 +    header('Content-Length: ' . filesize($file));
 +    ob_clean();
 +    flush();
 +    readfile($file);
 +    unlink($file); //  удаляем файл
 +}
 +?>
 +</file>