PHP - генерация отчетов

Экспорт в MS Excel

В PHP существует несколько библиотек облегчающих генерацию отчетов в формат файла .xlsx (нового формата MS Excel начиная с версии 2007):

Библиотека очень хорошо документирована, на сайте достаточное количество разнообразные примеров. Некоторые возможности библиотеки PHPExcel:

  1. Установка размеров ячеек
  2. Цвет текста
  3. Размеры текста
  4. Шрифты
  5. Заливка цветом области
  6. Рамки
  7. Работа с разными листами
  8. Вставка в ячейки формул
  9. Вставка в ячейки активных (кликабельных) ссылок
PHPExcel не умеет сортировать в документе Excel. Любые сортировки должны быть сделаны средствами PHP, до создания файла.
  • Пример. Генерация документа с двумя листами, заполнение его содержимым. Созданный файл предлагается клиенту сохранить. После сохранения файл у пользователя, файл на сервере удаляется.
    <?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); //  удаляем файл
    }
    ?>
PQ VPS сервера в 28+ странах.