Классическая задача – есть база с данными. Данные эти заказчик желает лицезреть в виде красиво оформленных экселек заданного вида. Мало того, что форматирование шаблонов не подлежит обсуждению – в них, для полного счастья, натыканы не только эксельные формулы но и vba-макросы. А сервер может быть как на виндах, так и на никсах, на которых эксели и вовсе не предусмотрены. Как бы это все половчее организовать?
Совсем универсальные – не зависят от типа базы данных, операционной системы и наличия самого экселя на серваке
1 вариант: кросс-платформенно, какая база – не принципиально, на сервер ничего офисо-подобного ставить не надо.
Данные дергаем чем удобней – расписывать это не буду, зависит от ситуации. Для формирования отчетности в excel можно воспользоваться библиотеками:
на Java:
JExcelApi, пример использования – http://www.vogella.de/articles/JavaExcel/article.html
Apache POI примеры использования подробно расписаны на сайте. Хотя вот тоже неплохой пример на русском.
на Perl:
Используя пакет Excel-Writer-XLSX (бывшие Spreadsheet::WriteExcel и Spreadsheet::ParseExcel) подробнейшие примеры использования поставляются вместе с пакетом.
Из минусов подобного подхода – когда последний раз пробовал – не удалось корректно отображать всю информацию в диаграммах, vba-содержимое файлов-шаблонов страдало. Возможно, сейчас эти недочеты уже подправлены. В любом случае, для большинства отчетов вышеупомянутых библиотек будет более чем достаточно.
2 вариант: воткнуть куда-нибудь Open Office и при необходимости использовать OOO SDK, например, через жаву. Официальные сниппеты валяются тут. Т.е. схема взаимодействия следующая – сервер получает запрос на формирование отчета, он подготавливает данные и перенаправляет их на сторонний сервис на том же сервере или другом. Там используя OpenOffice создается excel файл и возвращается основному серверу, который уже возвращает их клиенту. Из минусов – опен офис таки тяжеловат, на перекачивание данных туда-сюда будет уходить некоторое время. Из плюсов – проблем совместимости содержимого эксель-шаблонов не встречал – макросы, формулы, форматирование – работает все. Ну и опять же кроссплатформенно получается – благо опен офис вполне себе фурычит на никсах, виндах, да маках.
3 вариант: Аналогично варианту 2, однако, при необходимости создать документ эксель, оракловый сервер обращается к вашему самописному сервису на винде, где установлен эксель, предоставляя данные. Для формирования задействован “родной” sharp. Из минусов – таки нужен ексель и винда. Из плюсов – проблемы совместимости исключены.
Оракло-специфичные:
4 вариант: если оракл версии 11 – самый оптимальный – использовать Oracle Bi Publisher – о том как преобразовать пользовательские шаблоны к вашим данным он позаботиться сам. Ваша задача адаптировать их с помощью встроенных средств внести соответствующие изменения в механизм формирования отчетов для клиентов.
5 вариант: если версия оракла не позволяет воспользоваться возможностями Bi Publisher, а скупость – использовать готовые пакеты для этих целей – придется ваять таки ручками на pl/sql. Снипеты водятся в интернетах. (http://akdora.wordpress.com/2009/02/06/how-to-write-excel-via-plsql-and-save-the-file-to-a-directory/, http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:728625409049, PL/SQL ExcelDocumentType)
1 comment
I can’t believe I’ve been going for years wtoihut knowing that.