Для создания документа Excel на основании шаблона с динамическими данными из инфоблока bitrix используем библиотеку PHPExcel
-
Скачать библиотеку можно тут: https://github.com/PHPOffice/PHPExcel
-
При использовании данной библиотеки в CMS битрикс возможны ошибки связанные с mbstring.func_overload, что бы их избежать нужно закомментировать следующие строчки в файле \PhpExcel\Autoloader.php
if (ini_get('mbstring.func_overload') & 2) {
throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
}
-
Подключение библиотеки к файлу
include_once 'PHPExcel.php';
-
Основные функции для работы с файлом
$objPHPExcel = new PHPExcel(); //создание объекта excel
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); //присвоение типа файла шаблона
$objPHPExcel = $objReader->load('template.xlsx'); //загрузка шаблона
$objPHPExcel->setActiveSheetIndex(0); //Присвоение активности листа
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setCellValue("B1", 'TEST'); //Добавление текста в ячейку
$sheet->NewRowBefore("B2", 1); //Добавление новой строки
$sheet->mergeCells("B1":"C1"); //Объединение ячеек
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx"); //сохранение шаблона со всеми изменениями в новый файл
-
Важно! При создании шаблона поставить совместимость с предыдущими версиями
-
Заполнение данными шаблона.
Шаблон Exсel файла:
Пример:
include_once 'PHPExcel.php'; $objPHPExcel = new PHPExcel();
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load('template.xlsx');
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setCellValue("A2", 'Товар1');
$sheet->setCellValue("B2", '1');
$sheet->setCellValue("C2", '200');
$sheet->NewRowBefore("A2", 1);
$sheet->setCellValue("A3", 'Товар2');
$sheet->setCellValue("B3", '1');
$sheet->setCellValue("C3", '500');
$sheet->mergeCells("B4":"C4");
$sheet->setCellValue("B4", '700');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");
Результат: