Представляю на суд общественности написанную мною компоненту — TOdsReport для Lazarus.
OdsReport позволяет формировать отчеты в формат OpenOffice.org Calc минуя COM. Вывод ведется напрямую в файл. Для генерации отчета нужен один или несколько источников данных (DataSet), содержащих данные, а также предварительно подготовленный шаблон с уже готовой разметкой и форматированием. Шаблон оформляется следуя несложным правилам: ##DATASET.FIELDNAME## - в шаблоне заменяется на значение поля «FIELDNAME» из источника данных «DATASET» (например TSQLQuery). Данные выводятся порциями, определенными «Диапазонами данных» _DATASETTOSCROLL_, причем возможно неограниченное вложение диапазонов, что позволяет делать многоуровневые отчеты с подзапросами из нескольких источников данных. Доступно использование формул, но с некоторыми ограничениями: допускаются вычисления сверху вниз, т.е. в формуле нельзя использовать ячейки, расположенные ниже на листе, если на данном этапе еще неизвестно их расположение.
Не поддерживаются прочие встроенные объекты — диаграммы, рисунки и т.п. Типы данных пока тоже ограничены (число, строка, дата). В остальном, почти все работает и показывает впечатляющую производительность по сравнению с COM.
Как упоминалось, зависимости минимальны: требуется только zip/unzip для работы. Установленный OpenOffice не нужен. В настоящее время проект у меня уже реально используется под внутренним web-сервером: юзер клацает на кнопку в браузере, сформированный файл отсылается ему на почту или предлагается ссылка для скачивания.
Но стоит заметить, что релиз исключительно тестовый! Для работы мало годится. Я его оформил в компонент, написал лист документации, сделал наброски рабочей тестовой программки, чтобы вы оценили, и вынесли вердикт, в каком направлении мне его развивать? И нужно ли это вообще???
Вариант 1: пишу все исключительно для себя (потому как мне нужно), адаптированно для себя родного, и соответственно ни с кем не делюсь разработками, ни перед кем не стыдно за исходники, никому ничего не должен.
Вариант 2: Если кого-либо заинтересует проект, поступит критика и предложения, то проект продолжит публичную жизнь: буду делать багфиксы, оптимизирую код (ой как мне сейчас за него стыдно, но хотелось быстрее получить рабочий прототип), добавлю новые фичи, функциональность и т.п.