Для создания документа Excel на основании шаблона с динамическими данными из инфоблока bitrix используем библиотеку PHPExcel

  1. Скачать библиотеку можно тут: https://github.com/PHPOffice/PHPExcel

  2. При использовании данной библиотеки в 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).');
    }
  3. Подключение библиотеки к файлу

    include_once 'PHPExcel.php';
  4. Основные функции для работы с файлом

    $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"); //сохранение шаблона со всеми изменениями в новый файл
  5. Важно! При создании шаблона поставить совместимость с предыдущими версиями

  6. Заполнение данными шаблона.

    Шаблон 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");

    Результат: