Мельница данных- Разработка шаблонов (раздел целиком) (23.04.2024) | (одним файлом) |
Разработка шаблонов | ||||
Шаблон представляет собой обычную рабочую книгу Excel. Шаблоны для переноса данных в Excel физически интегрируются внутрь .MQR-файла и хранятся вместе с запросом. Разработку шаблона можно вести независимо, используя только Microsoft Excel (запуская его самостоятельно), а потом загрузить в файл запроса, а можно воспользоваться пунктом меню "Редактировать" на странице "Шаблоны". Для взаимодействия с источником данных рабочая книга-шаблон должна содержать в любом модуле макрос с именем "Template" (без кавычек) с одним параметром. При выполнении переноса данных по этому шаблону QueryBuilder произведет вызов этого метода, передав в качестве фактического значения параметра объект, реализующий интерфейс IExternalQuery. Никаких других требований к рабочей книге-шаблону не выдвигается.
|
1. Интерфейс IExternalQuery |
Объект, реализующий этот интерфейс, передается в макрос генерации отчета Excel (Template). Все его свойства и методы доступны для испоьзования в процессе генерации отчета 01 IExternalQuery = interface(IDispatch) 02 ['{1A86D1DA-A56E-4D53-88F9-7A035D7D12B4}'] 03 function Select(const SQL: WideString): IExternalDataSet; safecall; 04 function SelectedRecordsCount: Integer; safecall; 05 function SelectedRecord(Index: Integer): OleVariant; safecall; 06 procedure PlaceCurrentQuery(const Sheet: IDispatch; 07 CaptionsNeeded: WordBool = False; Row: Integer = 1; 08 Column: Integer = 1; ShiftRows: WordBool = True; 09 ShiftColumns: WordBool = False); safecall; 10 procedure PlaceQuery(const Sheet: IDispatch; const DataSet: ExternalDataSet; 11 Row: Integer = 1; Column: Integer = 1; ShiftRows: WordBool = True; 12 ShiftColumns: WordBool = False); safecall; 13 property CurrentQuery: WideString; 14 end;
|
2. Интерфейс IExternalDataSet |
Фактически, обертка над интерфейсом IDataSet . 1 IExternalDataSet = interface(IDispatch) 2 ['{CDC7992C-BB30-431C-9F81-3215175AD5AB}'] 3 procedure Next; safecall; 4 function Eof: WordBool; safecall; 5 property FieldCount: Integer; 6 property FieldName[Index: Integer]: WideString; 7 property Field[FieldIndex: OleVariant]: OleVariant; 8 end;Набор данных представляет собой однонаправленный курсор, каждая строка которого является набором именованных и нумерованных полей.
|