[Из песочницы] Генератор документов docx и xlsx
Год назад ко мне в очередной раз обратился постоянный заказчик. «Менеджеры — идиоты, — негодовал он. — Текучка кадров огромная, на обучение каждого уходят месяцы. А потом они делают ошибки».
Лишь после такой эмоциональной прелюдии последовало задание: «Необходимо, чтоб при заказе с сайта на почту приходил уже сформированный пакет документов в форматах MS Office: бланк заказа, счет к оплате, товарный чек, и спецификация».Задача сама по себе близка к статье «PHP + Word». Но сервис LiveDocx нам не подошел. Во-первых, предполагалось, что большая часть документов должна быть в Excel. Во-вторых, оплата «на Запад» из России была и есть проблематичной. В-третьих, у заказчика была масса идей и хотелок, которые этот, или подобный сервис вряд ли реализовал бы. Например, сложную таблицу, с разбивкой товаров на категории.
Так как сайтов у заказчика несколько, решено было строить отдельную систему — свой собственный сервис генерации документов, к которому сайты обращались бы в момент заказа.
В основу будущего кода легли идеи из той же, приведенной выше, хабростатьи, а так же публикация «Разбираем xlsx в PHP без готовых библиотек».
В итоге за месяц работы «генератор документов» был создан и запущен.
Что он умеет:
генерировать по шаблону документ docx путем прямой замены шаблонного тега на данные; то же самое делать с шаблонами в формате xlsx; расширять таблицы в xlsx и заполнять их входящими данными из массива; вставлять подзаголовки, разбивая таблицу на группы; вставлять ссылки — единичные, или как содержимое таблицы; Что генератор на данный момент не умеет:
работать с разными типами данных — все ячейки заполняются как строки. По этой причине невозможно использование формул excel в шаблоне, которые оперировали бы введенными данными; вставлять изображения; менять форматирование — оно полностью определяется в шаблоне. В таком виде он проработал вот уже скоро год. Проблемы за этот период возникали в основном только с клиентской частью — со стороны магазина. Хотя, это не значит, что скрипт «генератора» идеален. На сегодняшний день он обкатан только в одной реальной задаче.Вскоре возникла мысль, что этот продукт может быть полезен и другим людям. Так был зарегистрирован новый домен, на него установлена копия генератора документов и создан небольшой сайт, на котором можно «пощупать» работу скрипта, залить свой шаблон и эксплуатировать до тех пор, пока выдержит железо.
Сегодня я получила разрешение от заказчика выложить проект на Гитхабе и опубликовать эту статью, чем спешу воспользоваться.
Проверить работу скрипта можно на демо-примере.
Исходный код доступен в репозитории.