Формировать данные из инфоблока можно в различных форматах, в том числе и 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");
Результат: