Хабрахабр

[Из песочницы] PHP Excel Templator (PHP-шаблонизатор для Excel) или как мы до этого писали хардкод для Excel

image

Но, дабы не дублировать текст, который уже описан в документации, я расскажу только о важных моментах.
Дело в том, что php-библиотека для работы с excel-документами появилась давно, но для неё так до сих пор не придумали шаблонизатор (по крайней мере я практически ничего более толкового не нашёл). Думаю, что по скриншоту уже понятно, о чём идёт речь. Всё это делается одной командой: А всем нам нужна такая библиотека для excel, в которой в шаблоне вбил шаблонные переменные, передал параметры для них, и отправить в рендер.

use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; PhpExcelTemplator::saveToFile('./template.xlsx', './exported_file.xlsx', [ '' => date('d-m-Y'), '{department}' => 'Sales department',
]);

При этом у нас имеются следующие хотелки:

  • мы хотим применять несколько шаблонных переменных в одной ячейке
  • а ещё мы хотим передать массив, а в excel для этого в ячейке создавались соответствующие строки
  • а как насчёт двумерного массива, чтобы создавались не только строки, но и столбцы
  • а ещё нам нужно применять стили для каждой вставленной ячейки, например, чтобы выделить зелёным цветом крупные суммы или выделить жирным цветом отличившихся сотрудников

Вы скажете, что я уже пытался делать подобное: когда создаются строки, то колонки справа от этой ячейки будут дублироваться. Нет такого не произойдёт, потому что на самом деле не строки создаются, а «добавляются ячейки со сдвигом вниз». Кстати, в PHP Spreadsheet на данный момент такой функции нет, он может только вставлять строки.

Да, возможны. Возможны ли побочные эффекты при использовании большого количества одномерных и двумерных массивов? Дело в том, что ячейки (находящиеся с права), которые не содержат шаблонные переменные, они не сдвигаются. Особенно, когда используются несколько двумерных массивов в одном ряду и на нескольких строчках подряд. Выход из ситуации — создавать шаблонные переменные с пустыми данными и располагать эти переменные рядом с ячейками, для которых нужно делать отступы. В результате они могут быть перекрыты ячейками с двумерным массивом. Пример побочных эффектов имеется в папке «samples».

То есть шансы побочных эффектов сравнительно низки. Звучит сложно, но, если бы создавались строки, то побочных эффектов было бы намного больше.

Почему я не сделал этого сейчас? В планах: создать пример, в котором показано, как бороться с побочными эффектами; возможность применять стили без использования сеттеров (чтобы экспортировать меньше классов и уменьшить количество применяемого кода). А то вдруг окажется, что я изобрёл велосипед и всё, что я сделал — дичь полнейшая. Мне нужна поддержка, то есть мне мне надо знать, что это кому-то нужно. Поэтому жду ваши отзывы.

Ссылка на проект

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть