Решение этой беды для bitrix находится в этом репозитории . Нам нужен файлик xls_show.php. Его и запускаем при сборке
https://github.com/alexalexzolotuhin/bitrix_php_excel
.Если вы хоть раз сталкивались с генерацией exel- вы поймете.
Какая суть? у битрикса в кодировке utf-8 настройка для php mbstring.func_overload равна 2. И она в хлам убивает библиотеку phpExcel.
1. Почему это работает?
есть в битриксе модуль https://marketplace.1c-bitrix.ru/solutions/nkhost.phpexcel/ . Ребята там взяли и переписали класс работы с xls под другую кодировку и все. А потом подключили. Я же только установил их модуль , зашел в папку \bitrix\modules\nkhost.phpexcel\ и вытащил себе папку lib. и подключили таким способом. Я бы эти ребятам выслал нимб с кнопкой озарение- но не знаю их адреса. В описании модуля есть способ подключения. Заходим — и пользуемся. ручками прописываем путь , если мы вытащили класс самостоятельно.
Подключаем нужны класс.
1 2 3 4 5 |
if (ini_get('mbstring.func_overload') & 2) { $PHPEXCELPATH = "lib/PHPExcel/Classes_overload2"; } else { $PHPEXCELPATH = "lib/PHPExcel/Classes_overload0"; } |
как видите по коду, в зависимости от настройки overload для битрикса мы подключаем разные классы.
полный код подключения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php ini_set('display_errors', 1); ini_set('error_reporting', E_ALL); if (ini_get('mbstring.func_overload') & 2) { $PHPEXCELPATH = "lib/PHPExcel/Classes_overload2"; } else { $PHPEXCELPATH = "lib/PHPExcel/Classes_overload0"; } //require_once 'Classes/PHPExcel.php'; // Подключаем класс для работы с excel require_once($PHPEXCELPATH.'/PHPExcel.php'); // Подключаем класс для вывода данных в формате excel require_once($PHPEXCELPATH.'/PHPExcel/Writer/Excel5.php'); // Создаем объект класса PHPExcel $xls = new PHPExcel(); // Устанавливаем индекс активного листа $xls->setActiveSheetIndex(0); // Получаем активный лист $sheet = $xls->getActiveSheet(); // Подписываем лист $sheet->setTitle('Таблица умножения'); // Вставляем текст в ячейку A1 $sheet->setCellValue("A1", 'Таблица умножения mbstring.func_overload='. ini_get('mbstring.func_overload')); $sheet->getStyle('A1')->getFill()->setFillType( PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyle('A1')->getFill()->getStartColor()->setRGB('EEEEEE'); // Объединяем ячейки $sheet->mergeCells('A1:H1'); // Выравнивание текста $sheet->getStyle('A1')->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER); for ($i = 2; $i < 10; $i++) { for ($j = 2; $j < 10; $j++) { // Выводим таблицу умножения $sheet->setCellValueByColumnAndRow( $i - 2, $j, $i . "x" .$j . "=" . ($i*$j)); // Применяем выравнивание $sheet->getStyleByColumnAndRow($i - 2, $j)->getAlignment()-> setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } } // Выводим 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=matrix.xls" ); // Выводим содержимое файла $objWriter = new PHPExcel_Writer_Excel5($xls); $objWriter->save('php://output'); |
Можешь мне выслать «нимб с кнопкой озарение», это я делал))
Огромное спасибо