Excel для разработчиков СУБД

Microsoft Excel уже давно стал стандартом de-facto для анализа и обработки информации. В то же время, разработчики приложений зачастую игнорируют его богатые возможности. Да и эффективно связать Excel и вновь созданное приложение, добившись от них должного взаимодействия, далеко не просто. Свою роль играют и медлительность COM-модели, и некоторые особенности Excel. В общем, налаживание надежной и достаточно скоростной “информационной магистрали” между Excel и вновь разрабатываемыми приложениями и информационными системами – дело совсем не простое, требующее значительного времени и немалых усилий. К счастью, существуют инструменты, которые позволяют свести непроизводительные затраты того и другого к минимуму.

Семейство продуктов XL Report от Afalina Co., Ltd. – это набор решений для платформ VCL (Borland Delphi и C++ Builder), ActiveX и .NET, которые позволяют максимально быстро переносить в Excel данные, а также (в определенных пределах) управлять их обработкой средствами Excel. Как следует из его названия, XL Report – это генератор отчетов. Однако почти ничего общего с привычными band-генераторами отчетов (Quick Report и прочие) он не имеет, поскольку широко использует возможности Excel при создании отчетов. Возможности XL Report выходят за пределы обычного формирования отчетов, поэтому правильнее будет считать его связующим звеном и электронной таблицей. Связь эта является односторонней, поскольку, несмотря на свои особенности, XL Report – это генератор отчетов, а средств для импорта данных из Excel в приложение в нем не предусмотрено. Использование Excel в этом случае открывает весьма широкие возможности для дальнейшего анализа и обработки данных. Кроме того, можно использовать многочисленные встроенные инструменты Excel (условное форматирование, диаграммы, сводные таблицы) для “оживления” отчетов и повышения их доказательно-гипнотической силы.

Форма в Delphi IDE с источником данных и невизуальным компонентом XL Report (выделен)

Для всех платформ XL Report представлен лишь одним невизуальным компонентом. XL Report сконструирован таким образом, чтобы максимально облегчить его изучение и использование. Поэтому создание отчетов на его основе в значительной мере осуществляется в шаблонах этих отчетов – книгах Excel, что позволяет в простых случаях свести программирование к абсолютному минимуму. Фактически, иногда весь кодинг может заключаться в вызове метода Report. Все остальные настройки осуществляются через Object Inspector или Property Page компонента.

XL Report позволяет гибко варьировать способы передачи данных. Обычный способ передачи через массив Variant, применяемый в OLE/COM-модели, является достаточно медлительным и неудобным, поэтому используется редко. Кроме того, при его применении возможны ошибки, связанные с распознаванием типов данных. В связи с этим, применяемым по умолчанию методом является Fast DDE, работающий быстро и без ошибок. Еще одним доступным методом является передача через буфер обмена в формате CSV (достаточно быстро, но возможны ошибки распознавания). Его использование оправдано при работе с длинными текстовыми фрагментами, поскольку Fast DDE ограничивает максимальную длину передаваемых строк 255 символами на строку.

XL Report может осуществлять экспорт данных в двух режимах. Результатом в обоих случаях является лист Excel, содержащий извлеченные из источника данные. Расположение данных на листе отчета определяется шаблоном – электронной таблицей, которая, помимо обычных констант, формул и форматирования Excel, содержит ссылки на извлекаемые данные.

Пример книги-шаблона. Ссылки в ячейках показаны для наглядности. На самом деле, в ячейках с этими ссылками будет отображаться сообщение #ИМЯ?. Обратите внимание на ключи сортировки в служебной строке

В первом случае все данные из текущей записи источника (таблицы или запроса) копируются в скрытый лист Excel. В принципе, избыточной информации можно и не передавать, указав в определенной ячейке листа шаблона, содержимое каких именно полей вам необходимо. Извлечь данные из скрытого листа просто. Ячейки скрытого листа, содержащие соответствующую информацию, именуются в таком формате: “[Имя таблицы]_[Имя столбца]”. Например, если в ячейку шаблона введена формула “=tblCustomers_PHONE“, то при генерации отчета в этой ячейке окажутся данные поля “PHONE” из текущей записи таблицы “Customers”. Учитывая, что после генерации отчета эти данные берутся уже из скрытого листа самого Excel, а не из базы данных, в готовый отчет (а не только в шаблон) можно вставить сколько угодно таких формул-ссылок.

Пример готового отчета

Второй способ немного напоминает работу обычных band-генераторов отчетов. В шаблоне задается специальная область данных, в которую и производится вывод. В этой области точно таким же способом, как в первом случае, задаются ссылки на имена источников (таблиц и запросов) и столбцов. При этом, если размеры области являются недостаточными для вывода всей информации, в нее добавляются дополнительные ячейки (именно ячейки, поскольку дополнительные строки в таблицу не добавляются). Области могут быть безо всяких ограничений вложены друг в друга, что отражает привычные связи между таблицами “один-ко-многим”.

Предназначение обоих режимов очевидно. Первый позволяет выводить одну строку таблицы данных или результата выполнения запроса – иначе говоря, информацию, касающуюся какого-либо одного объекта. Второй режим позволяет передавать в Excel групповые выборки. Единицей, с которой в данном случае работает XL Report, является список данных (по терминологии Excel). Диапазон данных – это прямоугольное поле ячеек Excel, которое удовлетворяет следующим требованиям: оно поименовано, содержит не менее двух строк и двух столбцов (крайний левый столбец и нижняя строка являются служебными), может содержать данные, формулы и пустые ячейки; ячейки не должны быть объединены. В служебных строке и столбце указываются опции: сортировка, автофильтр, группирование, промежуточные итоги, форматирование и т.д. В прочих ячейках области указываются ссылки на поля данных, из которых в отчет должна быть перенесена информация. Заголовки с названиями столбцов в диапазон не включаются, но подразумеваются.

XL Report может выводить данные и в область, которая не отвечает всем перечисленным требованиям. Однако в этом случае не может быть применена автообработка при генерации отчетов. Это связано с архитектурными ограничениями Excel, а не XL Report, поскольку операции с данными при формировании отчета выполняет самим Excel. Тем не менее, возможности автоматизации при этом не теряются – просто в этом случае все необходимые действия придется осуществлять с помощью VBA-макросов. XL Report поддерживает вызов макросов как перед генерацией отчета, так и после него, что дает практически неограниченные возможности по вычислению параметров запроса и управлению внешним видом построенного на его основе отчета.

С помощью VBA могут создаваться также сводные таблицы (специальные многомерные таблицы в Excel, являющиеся мощным средством для анализа данных) и диаграммы. Впрочем, сводные таблицы и диаграммы можно создавать и без использования VBA. Сводная таблица может быть сгенерирована XL Report, если на листе шаблона в левой нижней ячейке области данных указана опция pivot с параметрами требуемой сводной таблицы. Последние версии продукта также поддерживают возможность создания диаграмм прямо при редактировании шаблона отчета. При непосредственной генерации отчета они обновляются, принимая вид, соответствующий содержащейся в отчете информации.

Шаблон для генерации сводной таблицы (Pivot Table)

В качестве источников данных XL Report может использовать всех наследников TDataSet (в варианте под VCL), DAO, ADO и RDO Recordsets (в варианте под ActiveX), все классы, реализующие IListSource (в варианте под .NET), а также произвольные наборы данных – вариантные массивы, одиночные значения или списки, формируемые “на лету”.

XL Report поддерживает работу с Excel от версии 97 и выше. Все варианты комплектуются достаточно объемистым (разумеется, электронным) “руководством для разработчика” и многочисленными примерамы. В варианте для VCL это – проекты для Delphi и C++ Builder, для ActiveX – база данных Access и VB6-проект, а для .NET-редакции – проект на C#.

Для каждой из платформ XL Report имеет стандартную и профессиональную редакции. Стандартная редакция позволяет быстро освоить продукт и приступить к его использованию. В свою очередь, профессиональная редакция позволяет задействовать богатый набор возможностей XL Report.

Кроме того, XL Report может поставляться с исходными текстами, что дополнительно облегчает изучение и понимание принципов его действия. Лицензионное соглашение допускает модификацию продукта для собственных целей.

Технология XL Report насчитывает уже пятилетнюю историю. По информации от разработчиков, компании Afalina Co., Ltd., готовится к релизу новое поколение продуктов, основанных на этой технологии. В них будут сняты некоторые ограничения, присущие нынешнему XL Report, появятся дополнительные возможности, а главное – список поддерживаемых “партнерских” приложений перестанет исчерпываться только MS Excel. В мире есть еще немало других хороших табличных процессоров.

Автор статьи: Дмитрий Лобач

Comments are closed.