alhimik1986 / php-excel-templator

PHP Spreadsheet extension to the export excel file from excel template
MIT License
344 stars 68 forks source link

styles_without_setters #1

Closed htmls closed 5 years ago

htmls commented 5 years ago

Добрый день.

А как можно ошибки отловить? PhpExcelTemplator::saveToFile($templateFile, $fileName, $params); - нет проблем. PhpExcelTemplator::saveToFile($templateFile, $fileName, $params, $callbacks); - нет файла.

alhimik1986 commented 5 years ago

Я не совсем понял в чём заключается проблема. Что значит нет файла? Можно подробнее. Я запускал run.cmd - всё норм, файл появляется. Попробуй открыть консоль и запустить run.cmd

htmls commented 5 years ago

Я пытаюсь на основании примера сгенерировать свой файл. Если я делаю это без указания параметра $callbacks, файл формируется. Как только в вызов я добавляю $callbacks, файл перестает создаваться, никаких ошибок в браузере нет.

alhimik1986 commented 5 years ago

Попробуй обновить репозиторий, т.к. я эту фичу реализовал недавно (в пятницу). Если не поможет, то можешь прислать исходники, чтобы я мог у себя воспроизвести эту ошибку, а то у меня не получается.

htmls commented 5 years ago

я в субботу устанавливал.

`use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; $templateFile = 'demo.xlsx'; $fileName = 'exported_file.xlsx';

$params = [ '{current_date}' => date('d-m-Y H:i:s'), '{department}' => 'Sales department' ];

$params['[manager]'] = ['Иванов И.', 'Петров П.', 'Сидоров С.']; $params['[sales]'] = ['30000', '50000', '80000'];

$params['[customerType]'] = ['Type 1', 'Type 2', 'Type 3']; $params['[salesByType]'] = ['130000', '20000', '10000'];

$params['[appName]'] = ['App 1', 'App 2', 'App 3', 'App 4']; $params['[[period]]'] = [['Jan-2018', 'Feb-2018', 'Mar-2018', 'Apr-2018', 'May-2018', 'Jun-2018']]; $params['[[salesByPeriod]]'] = [ ['1100', '1120', '1130', '1400', '1500', '1600'], ['2100', '2200', '3200', '4200', '5200', '6200'], ['3000', '3200', '3400', '4500', '5100', '3600'], ['1300', '1200', '5400', '3500', '1100', '1600'], ];

$callbacks = [ '[sales]' => function(CallbackParam $param) { $sheet = $param->sheet; $row_index = $param->row_index; $cell_coordinate = $param->coordinate; $amount = $param->param[$row_index]; $amount = preg_replace('/[\s\$]/', '', $amount); if ($amount > 50000) { $sheet->getStyle($cell_coordinate)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('FFB5FFA8'); $sheet->getStyle($cell_coordinate)->getFont()->setBold(true); } }, '[[salesByPeriod]]' => function(CallbackParam $param) { $sheet = $param->sheet; $row_index = $param->row_index; $col_index = $param->col_index; $cell_coordinate = $param->coordinate; $amount = $param->param[$row_index][$col_index]; if ($amount > 3000) { $sheet->getStyle($cell_coordinate)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('FFB5FFA8'); $sheet->getStyle($cell_coordinate)->getFont()->setBold(true); } }, ];

PhpExcelTemplator::saveToFile($templateFile, $fileName, $params, $callbacks);`

alhimik1986 commented 5 years ago

Я пометил жирным недостающие строки. У меня работает. При использовании кода вне папки samples (без использования фреймворков) нужно подтягивать vendor/autoload.php ` use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; use alhimik1986\PhpExcelTemplator\params\CallbackParam;

require_once('vendor/autoload.php'); // if you don't use framework

$templateFile = 'demo.xlsx'; $fileName = 'exported_file.xlsx';

$params = [ '{current_date}' => date('d-m-Y H:i:s'), '{department}' => 'Sales department' ];

$params['[manager]'] = ['Иванов И.', 'Петров П.', 'Сидоров С.']; $params['[sales]'] = ['30000', '50000', '80000'];

$params['[customerType]'] = ['Type 1', 'Type 2', 'Type 3']; $params['[salesByType]'] = ['130000', '20000', '10000'];

$params['[appName]'] = ['App 1', 'App 2', 'App 3', 'App 4']; $params['[[period]]'] = [['Jan-2018', 'Feb-2018', 'Mar-2018', 'Apr-2018', 'May-2018', 'Jun-2018']]; $params['[[salesByPeriod]]'] = [ ['1100', '1120', '1130', '1400', '1500', '1600'], ['2100', '2200', '3200', '4200', '5200', '6200'], ['3000', '3200', '3400', '4500', '5100', '3600'], ['1300', '1200', '5400', '3500', '1100', '1600'], ];

$callbacks = [ '[sales]' => function(CallbackParam $param) { $sheet = $param->sheet; $row_index = $param->row_index; $cell_coordinate = $param->coordinate; $amount = $param->param[$row_index]; $amount = preg_replace('/[\s$]/', '', $amount); if ($amount > 50000) { $sheet->getStyle($cell_coordinate)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('FFB5FFA8'); $sheet->getStyle($cell_coordinate)->getFont()->setBold(true); } }, '[[salesByPeriod]]' => function(CallbackParam $param) { $sheet = $param->sheet; $row_index = $param->row_index; $col_index = $param->col_index; $cell_coordinate = $param->coordinate; $amount = $param->param[$row_index][$col_index]; if ($amount > 3000) { $sheet->getStyle($cell_coordinate)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('FFB5FFA8'); $sheet->getStyle($cell_coordinate)->getFont()->setBold(true); } }, ];

PhpExcelTemplator::saveToFile($templateFile, $fileName, $params, $callbacks); `

htmls commented 5 years ago

Спасибо! Проглядел в примерах подключение 2го класса... :(

Liphanes commented 5 years ago

Подскажите пожалуйста, в чем может быть проблема. Ajax'ом вызываю файл с таким содержимым use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; use alhimik1986\PhpExcelTemplator\params\ExcelParam; use alhimik1986\PhpExcelTemplator\setters\CellSetterStringValue; use alhimik1986\PhpExcelTemplator\setters\CellSetterArrayValue; use alhimik1986\PhpExcelTemplator\setters\CellSetterArray2DValue;

require_once('vendor/autoload.php'); $filename = date("Y-m-d");

$templateFile = $_SERVER['DOCUMENT_ROOT'].'templates/shabl_nacl.xlsx'; $fileName = $_SERVER['DOCUMENT_ROOT'].'tmp/exportedfile'.$filename.'.xlsx';

$path=$_SERVER['DOCUMENT_ROOT']; $source=$_SERVER['DOCUMENT_ROOT']."/templates/shabl_nacl.xlsx";

$now = new DateTime();

$params = [ '{clinfo}' => new ExcelParam(CellSetterStringValue::class, $now->format('d-m-Y')), '{docnm}' => new ExcelParam(CellSetterStringValue::class, 'Sales department'), ];

PhpExcelTemplator::saveToFile($templateFile, $fileName, $params); по итогу должен сохраниться файл, но этого не происходит. Что я делаю не так?