Формировать данные из инфоблока можно в различных форматах, в том числе и Excel. Для создания документа Excel на основании шаблона с динамическими данными из инфоблока bitrix используем библиотеку PHPExcel.
При использовании данной библиотеки в CMS 1С:Битрикс возможно появление ошибок, связанных с 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");
Результат: