Выгрузка данных в XLS-файл

2 октября 2017
Для работы с XLS-файлами (Эксель, Excel) под PHP существует библиотека PHPExcel.
Ссылка на репозиторий библиотеки: https://github.com/PHPOffice/PHPExcel

Ниже пример работы с PHPExcel, где ставилась задача заполнить XLS-файл данными и возвратить итоговый файл в браузер пользователя:
<?php
//Подключение библиотеки PHPExcel
require_once($_SERVER['DOCUMENT_ROOT'].'/local/tools/excel/PHPExcel.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/local/tools/excel/PHPExcel/Writer/Excel5.php');
$excelObj = new PHPExcel();

//Устанавливаем активный лист
$excelObj->setActiveSheetIndex(0);
$activeSheet = $excelObj->getActiveSheet();

//Заголовок листа
$activeSheet->setTitle('Прайс-лист');

//Готовим данные для записи в лист
$arData[] = array(
	'A' => 'Код',
	'B' => 'Название',
	'C' => 'Артикул',
	'D' => 'Цена'
);
$arData[] = array(
	'A' => '1111',
	'B' => 'Тестовый товар 1',
	'C' => 'а0001',
	'D' => '2 500 руб'
);
$arData[] = array(
	'A' => '2222',
	'B' => 'Тестовый товар 2',
	'C' => 'а0002',
	'D' => '3 120 руб'
);
$arData[] = array(
	'A' => '3333',
	'B' => 'Тестовый товар 3',
	'C' => 'а0003',
	'D' => '1 840 руб'
);

//Записываем данные в лист
$indexRow = 0;
foreach($arData as $row)
{
	$indexRow++;
	foreach($row as $cellLetter => $cellValue)
	{
		$activeSheet->setCellValue($cellLetter.$indexRow, $cellValue);
	}
}

//Установка ширины колонок
$activeSheet->getColumnDimension('A')->setWidth(15);
$activeSheet->getColumnDimension('B')->setWidth(60);
$activeSheet->getColumnDimension('C')->setWidth(30);
$activeSheet->getColumnDimension('D')->setWidth(20);

//Стилизуем ячейки
$styleWrap = array(
	'borders' => array(
		//внутренняя рамка
 		'allborders'=>array(
	 		'style' => PHPExcel_Style_Border::BORDER_THIN,
	 		'color' => array(
	 			'rgb'=>'696969'
	 		)
 		)
 	)
);
$activeSheet->getStyle('A1:D'.$indexRow)->applyFromArray($styleWrap);

//Выравниваем текст по левому краю
$activeSheet->getStyle('A1:D'.$indexRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

//Выводим HTTP-заголовки для отдачи файла пользователю
header("Expires: Mon, 1 Apr 1974 05:00:00 GMT");
header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=Прайс-лист.xls");

//Отдаём готовый файл в браузер пользователя
$objWriter = new PHPExcel_Writer_Excel5($excelObj);
$objWriter->save('php://output');
exit;

?>