Объединение ячеек в xlsx при использовании OpenTBS

Что-то давно я ничего не писал о PHP, к которому приходится обращаться все реже из-за моей нынешней любви к javascript. Однако, некоторые задачи попрежнему тяжело реализовать на клиенте и потому приходится вспоминать о серверных технологиях. В очередной раз мне потребовалось сгенерировать отчет в excel, точнее заполнить существующую форму данными.

Первначальное решение с помощью Excel.Automation требует наличия на каждой клиентской машине и грозит потенциальными проблемами с версиями MS Office. В поисках решения, я стал поглядывать в сторону шаблонных генераторов и не нашел практически ничего. Тут-то на глаза мне попался проект TBS, который с помощью своего плагина OpenTBS обещал мне золотые горы, в виде, генерации документов OpenXML (в том числе и xlsx) на основе шаблона.

Он действительно это умеет! При этом количесво кода, который нужно написать совсем невелико, в отличие от PHPExcel. Внешний вид полей задается небосредственно в шаблоне xslx-документа. Синтаксис полей в шаблоне прост и понятен. Ура!!! Лучше всего возможности OpenTBS демонстрируется на этой демо странице

Но! Куда же без этого. Плагин не имеет средств для построчного объединения ячеек при выводе списков и потому его пришлось немного доработать напильником, расширив шаблон параметром merge и написав для него соответсвующий обработчик. Теперь поле, для которого необходимо выполнить объединение должно задаваться примерно вот так:

  1. [a.num;block=row;ope=xlsxMerge;merge=7:A:M]

В качестве значения merge испольуется строка с тремя параметрами base:start:end, где base - номер первой строки списка, start и end - начальный и конечный индесы объединения. Пример выше указывает, что необходимо объеденить ячейки A7:M7, A8:M8, A9:M9 и так далее, пока в выводимом списке есть значения.

Для запуска необходимо выполнить команду Merge Cells, которой я расширил плагин OpenTBS.

  1. $template = 'template.xlsx';
  2. if(!file_exists($template))
  3. {
  4. echo "file $template not found";
  5. }
  6. $TBS->LoadTemplate($template);
  7. $TBS->PlugIn(OPENTBS_SELECT_SHEET, 1);
  8. $TBS->MergeBlock('a', $data);
  9. $TBS->PlugIn(OPENTBS_MERGE_CELLS);
  10. $filename = "output.xlsx";
  11. $TBS->Show(OPENTBS_FILE+TBS_EXIT, $filename);

Модифицированная версия плагина и пример его использования доступны на GitHub OpenTBS with cells merge for xlsx

Читайте в блоге

TODO LIST по мотивам GTD

Метки: php tbs opentbs

Комментарии:

Войдите на сайт, чтобы оставить комментарий