В PHP существует несколько библиотек облегчающих генерацию отчетов в формат файла .xlsx (нового формата MS Excel начиная с версии 2007):
Библиотека очень хорошо документирована, на сайте достаточное количество разнообразные примеров. Некоторые возможности библиотеки PHPExcel:
<?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); // удаляем файл
}
?>