.
Tuesday 22nd of May 2012    

Информация

Счетчики

Голосование

Лучшая марка телефона
 

Реклама

фильмы онлайн

фильмы онлайн


Пример универсального генератора отчетов
загрузка...

Наступила пора проверить свои знания на практике. Предлагаю создать полезную утилиту - программу, позволяющую экспортировать в документ Word данные из таблиц формата Paradox и dBase. Для этого нам понадобится три компонента: обычная кнопка TButton, таблица TTable и диалог открытия файла TOpenDialog. Разместите их на главной форме нового проекта. Теперь подключим к проекту модуль ComObj, в котором объявлена бесценная функция CreateOleObject(), инициирующая объект автоматизации.

uses ComObj;

Затем настроим диалог открытия файлов. Для этого в момент создания формы определим фильтр, пропускающий файлы только с расширениями *.db (таблицы Paradox) и *.dbf (таблицы dBase). Кроме того, внесем некоторые изменения в опции диалога.

procedure TForm1.FormCreate(Sender: TObject); begin

OpenDialog1.Filter:='Таблицы Paradox и dBase|*.db;*.dbf'; OpenDialog1.Options:=OpenDialog1.Options+[ofReadOnly]-[ofAllowMultiSelect]; end;

Переходим к ядру нашей программы - процедуре генератора отчетов. Для этого в секции частных объявлений проекта опишите заголовок метода:

procedure CreateWordReport;

Реализация метода выглядит так:

procedure TForm1.CreateWordReport; var Word, Doc, Range, Paragraph, Table : OleVariant; aRow, aCol : integer;

begin

Word:=CreateOleObject('Word.Application'); //вызываем сервер автоматизации Word try

Doc:=Word.Documents.Add; {новый документ}

Doc.PageSetup.PaperSize:=7; {формат A4} Doc.PageSetup.Orientation:=1; {альбомная ориентация}

Range:=Doc.Range;

Range.InsertBefore('Таблица '+Table1.TableName); {первая строка на странице}

Pa rag raph:=Doc.Paragraphs.Add; {добавим пару пустых абзацев} Paragraph:=Doc.Paragraphs.Add;

{вставляем в документ пустую таблицу, количество строк и столбцов определяется числом записей RecordCount и полей FieldCount в файле базы данных} Table:=Doc.Tables.Add(Paragraph.Range, Table1.RecordCount+1, Table1.FieldCount); {формируем заголовок таблицы из названий полей} for aCol:=1 to Table1.FieldCount do

Table.Cell(1,aCol).Range.InsertAfter(Table1.Fields[aCol-1].DisplayName);

aRow:=2; //переводим счетчик строк на 2-ю строку

while Table1.Eof<>true do {перебираем строки файла и заполняем таблицу данными} begin

for aCol:=1 to Table1.FieldCount do {перебор колонок} begin

if Table1.Fields[aCol-1].IsBlob=False then {не пропускаем BLOB-поля}

Table.Cell(aRow,aCol).Range.InsertAfter(Table1.Fields[aCol-1].AsString)

else

Table.Cell(aRow,aCol).Range.InsertAfter('BLOB'); end;

Inc(aRow); //приращение счетчика строк

Table1.Next; //переход к следующей строке end;

Table.AllowAutoFit:=True; {форматируем таблицу} Table.AutoFormat(9);

finally

Word.Visible:=true;

Word := Unassigned;

Table1.Close; end; end;

После столь титанических трудов немного передохнем и сделаем последний шаг - научим программу передавать в процедуру CreateReport() имя файла таблицы:

procedure TForm1.Button1Click(Sender: TObject); begin

if OpenDialog1.Execute then begin

with Table1 do {открываем файл таблицы базы данных} begin

Close;

DatabaseName:=ExtractFilePath(OpenDialog1.FileName);

TableName:=ExtractFileName(OpenDialog1.FileName); Open; end;

CreateWordReport;

end; end;

//извлекаем путь //к файлу таблицы //узнаем имя файла таблицы //открываем набор данных

//генерация отчета

Вот и все! На мой взгляд, у нас получилась весьма элегантная и главное -полезная программка.


загрузка...
 

Самое популярное:

bottom

карта сайта