Думаю, что по скриншоту уже понятно, о чём идёт речь. Но, дабы не дублировать текст, который уже описан в документации, я расскажу только о важных моментах.
Дело в том, что php-библиотека для работы с excel-документами появилась давно, но для неё так до сих пор не придумали шаблонизатор (по крайней мере я практически ничего более толкового не нашёл). А всем нам нужна такая библиотека для excel, в которой в шаблоне вбил шаблонные переменные, передал параметры для них, и отправить в рендер. Всё это делается одной командой:
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator;
PhpExcelTemplator::saveToFile('./template.xlsx', './exported_file.xlsx', [
'{current_date}' => date('d-m-Y'),
'{department}' => 'Sales department',
]);
При этом у нас имеются следующие хотелки:
- мы хотим применять несколько шаблонных переменных в одной ячейке
- а ещё мы хотим передать массив, а в excel для этого в ячейке создавались соответствующие строки
- а как насчёт двумерного массива, чтобы создавались не только строки, но и столбцы
- а ещё нам нужно применять стили для каждой вставленной ячейки, например, чтобы выделить зелёным цветом крупные суммы или выделить жирным цветом отличившихся сотрудников
Вы скажете, что я уже пытался делать подобное: когда создаются строки, то колонки справа от этой ячейки будут дублироваться. Нет такого не произойдёт, потому что на самом деле не строки создаются, а «добавляются ячейки со сдвигом вниз». Кстати, в PHP Spreadsheet на данный момент такой функции нет, он может только вставлять строки.
Возможны ли побочные эффекты при использовании большого количества одномерных и двумерных массивов? Да, возможны. Особенно, когда используются несколько двумерных массивов в одном ряду и на нескольких строчках подряд. Дело в том, что ячейки (находящиеся с права), которые не содержат шаблонные переменные, они не сдвигаются. В результате они могут быть перекрыты ячейками с двумерным массивом. Выход из ситуации — создавать шаблонные переменные с пустыми данными и располагать эти переменные рядом с ячейками, для которых нужно делать отступы. Пример побочных эффектов имеется в папке «samples».
Звучит сложно, но, если бы создавались строки, то побочных эффектов было бы намного больше. То есть шансы побочных эффектов сравнительно низки.
В планах: создать пример, в котором показано, как бороться с побочными эффектами; возможность применять стили без использования сеттеров (чтобы экспортировать меньше классов и уменьшить количество применяемого кода). Почему я не сделал этого сейчас? Мне нужна поддержка, то есть мне мне надо знать, что это кому-то нужно. А то вдруг окажется, что я изобрёл велосипед и всё, что я сделал — дичь полнейшая. Поэтому жду ваши отзывы.
Ссылка на проект