Механизм создания отчета в формате Word

Программный продукт как набор данных и функций. Анализ модели программирования СОМ, преимущества и недостатки. Особенности создания таблиц в Microsoft Word. Рассмотрение достоинств Delphi. Windows как многопоточная и многозадачная операционная система.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.11.2012
Размер файла 933,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

программный продукт word операционный

Любой программный продукт представляет собой набор данных и функций, которые как то используют, обрабатывают эти данные. Этот принцип, лежит в основе ООП. Там класс инкапсулирует данные и методы, которые служат для управления ими. Сходный принцип используется и в модели программирования СОМ. СОМ-объектом называется такой программный продукт, который обеспечивает доступ к данным с помощью одного или нескольких наборов функций, которые называются интерфейсами.

В отличие от ООП, которое рассматривает интеграцию классов на уровне исходных модулей -- текстов программ, СОМ рассматривает интеграцию компонентов на двоичном уровне, то есть на уровне исполняемых модулей. Цель -- многократное использование удачно разработанных компонентов именно на этом уровне. Двоичный уровень дает независимость от аппаратной архитектуры и языков программирования. Двоичный стандарт взаимодействия позволяет СОМ-объектам, разработанным разными поставщиками и на разных языках, эффективно взаимодействовать друг с другом. С практической точки зрения СОМ -- это набор системных библиотек (DLL-файлов), которые дают возможность разным приложениям, выполненных с учетом требований СОМ, взаимодействовать друг с другом. Исторически сложилось так, что СОМ состоит из нескольких различных технологий, которые пользуются услугами друг друга для формирования объектно-ориентированной системы.

Объектом исследования данной работы является технология СОМ.

Предмет исследования: механизм создания отчета в формате Word

Цель данной работы: выяснить что же такое технология СОМ, ее преимущества и возможные недостатки.

Задача работы: создание отчета из базы данных Access посредством Delphi в формате Word

Гипотеза: Если иметь познания в основах технологии СОМ и автоматизации Word, то будет возможным создание отчета в формате Word посредством ООП.

Основы технологии СОМ

COM (Component Object Model - модель многокомпонентных объектов)- одна из базовых технологий Windows. Более того, все новые технологии Windows(Shell, Scripting, HTML и т.п.) реализуют свои прикладные программные интерфейсы(Application Program Interface, API) именно в виде СОМ-интерфейсов. Таким образом, в настоящее время профессиональное программирование требует понимания модели СОМ и умения с ней работать.

Цели и задачи технологии СОМ

Основная цель технологии СОМ - обеспечение возможности экспорта объектов. Идея экспорта объектов заключается в том, что один модуль создает объект, а другой его использует посредством обращения к методам или сервисам. Конечно, в экспорте простейших объектов обычно не возникает необходимости - любой программист может создавать объекты с заданными свойствами в рамках своего приложения - определяющим при этом является время, требующее для написания кода. Однако предположим, что где-то и кем-то был реализован достаточно сложный алгоритм распознавания текста в файле формата ВМР, получаемом при сканировании документов. Конечно же, производители сканеров захотят предоставить дополнительные возможности покупателям и пожелают включить такое программное обеспечение в свой пакет. При этом любая фирма будет стараться свести к минимуму число приложений в своем пакете; по возможности все сервисы должны предоставляться одним приложением.

На первый взгляд, эта проблема решается достаточно просто, по крайней мере, когда в качестве другого модуля используется динамически загружаемая библиотека(Dynamic Link Library, DLL). В этом случае оба модуля содержатся в одном и том же адресном пространстве. Казалось бы, достаточно создать в DLL объект, а его методы вызвать из основного приложения - и задача решена. Чтобы понять, что это не так, рассмотрим небольшой пример. Определим метод IsFont в приложении:

procedure IsFont(0: TObject);

begin

if 0 is TFont then

ShowMessage(`Font')

else

ShowMessage(`Not font');

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

IsFont(Font);

end;

Вызовем этот метод из приложения. В качестве параметра метода IsFont используем свойство Font формы. Как и ожидалось, появиться сообщение, что объект является шрифтом.

Теперь создадим динамически загружаемую библиотеку, поместим в нее функцию IsFont и объявим ее экспортируемой:

library FontLib;

uses

SysUtils,

Dialogs,

Graphics,

Classes;

procedure IsFont(0: TObject);

begin

if 0 is TFont then

ShowMessage(`Font')

else

ShowMessage(`Not font');

end;

exports

IsFont name `IsFont';

begin

end.

Пусть функция IsFont вызывается из библиотеки при щелчке на кнопке Button2 в вызывающем приложении:

procedure IsF(0: TObject); external `FontLib.dll' name `IsFont';

procedure TForm1.Button2Click(Sender: TObject);

begin

IsF(Font);

end;

Результат этого действия окажется противоположным - теперь мы получим сообщение о том, что данный объект не является шрифтом. Таким образом, при создании приложения, состоящего из нескольких двоичных модулей, некоторые традиционные приемы уже не работают. В частности, оператор is всегда возвратит False, а использование оператора as приведет к исключению.

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

procedure IsF(0: TObject); external `FontLib.dll' name `IsFont';

Эта строка определяет имя функции IsFont и список ее параметров 0: TObject, поэтому программисту, использующему эту библиотеку, потребуется документация - список функций со списком их формальных параметров. Их реализация <<вручную>> с большой вероятностью приведет к ошибкам. Для исправления ошибок потребуется время, причем без всякой гарантии, что все ошибки будут обнаружены. Хотелось бы, чтобы сам модуль мог информировать среду разработки о том, какие методы ей доступны и каковы списки их формальных параметров.

Сложности работы с различными модулями этим не ограничиваются. Например, если в одном из модулей зарезервирована память для хранения данных, то в другом модуле без специальных мер нельзя ни освободить ее, ни изменить ее размер. Это связано с тем, что в каждом модуле имеется собственный менеджер памяти. Если один модуль выделяет память, то в менеджере памяти другого модуля это никак не фиксируется. Для реализации операций связанных с применением в различных модулях общих областей памяти, необходимо наличие общего менеджера памяти. Для его создания в Delphi используется модуль ShareMem.

Еще одна проблема возникает при обращении к объекту, созданному другим приложением. В этом случае указатель на объект в памяти, созданный в одном приложении, является недействительным для другого приложения. Если передать указатель из одного приложения в другое, последнее будет обращаться совсем не к тем ячейкам оперативной памяти компьютера, в которых реально находятся данные, а это приведет к некорректному функционированию программы. Проблему можно представить глобально, если рассмотреть возможность создания объекта на одном из компьютеров, а использования его через сеть на другом.

Очередная проблема возникает при передаче двоичных данных от одного приложения к другому. Многие языки программирования имеют разное внутреннее представление переменных(например, строки, логические значения), и при получении данных от заранее неизвестного приложения их интерпретация подчас невозможна.

Можно выделить и другие проблемы, которые встречаются при традиционном программировании, например:

· поиск установленной копии приложения, реализующего требуемые сервисы, и корректная его инициализация;

· обеспечение корректной работы приложения-сервера одновременно с несколькими клиентами;

· управление памятью, выгрузка из памяти приложения-сервера, когда необходимость в нем отпадет и, наоборот, предотвращение несвоевременной выгрузки.

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

Базовые понятия. Интерфейс

Основным понятием, на котором основана модель СОМ, является понятие интерфейса (interface). Без четкого понимания того, что такое интерфейс, невозможно успешное программирование СОМ-объектов.

Интерфейс является контрактом между программистом и компилятором:

· программист обязуется реализовать все методы, описанные в интерфейсе, и следовать требованиям на реализацию некоторых из них;

· компилятор обязуется создать в программе внутренние структуры, позволяющие обращаться к методам этого интерфейса из любого поддерживающего те же соглашения средства программирования.

Таким образом, СОМ является языково-независимой технологией и может использоваться в качестве <<клея>>, соединяющего программы, написанные на разных языках.

Объявление интерфейса включает в себя описание методов и их параметров, но не включает реализации методов. Кроме этого, в объявлении может указываться идентификатор GUID интерфейса - уникальное 116-байтовое число, сгенерированное по специальным правил, гарантирующим его статическую уникальность.

Интерфейсы могут наследоваться. При наследовании подразумевается, что унаследованный интерфейс должен включать в себя все методы предка.

Таким образом, необходимо понять следующее.

· Интерфейс - это не класс. Класс может выступать в роли реализации интерфейса, но класс содержит код методов на конкретном языке программирования, а интерфейс - нет.

· Интерфейс строго типизирован. Как клиент, так и реализация интерфейса должны использовать именно те методы и их параметры, которые указаны в описании интерфейса.

· Интерфейс является неизменным контрактом. Не следует определять новую версию того же интерфейса с измененным набором методов(или их параметров), но с тем же идентификатором. Это гарантирует, что новые интерфейсы никогда не будут конфликтовать со старыми. Если возникает необходимость в расширении функциональности, следует определить новый интерфейс, возможно, являющийся наследником старого, и реализовать дополнительные методы в нем.

Реализация интерфейса - это непосредственно код, реализующий методы интерфейса. При этом, за несколькими исключениями, не накладывается никаких ограничений на то, каким образом будет выглядеть реализация. Физически реализация представляет собой массив указателей на методы, адрес которого и используется в клиенте для доступа к СОМ-объекту. Любая реализация интерфейса содержит метод QueryInterface, позволяющий запросить ссылку на конкретный интерфейс из числа реализуемых.

Идентификатор GUID

Теперь можно рассмотреть проблемы выбора необходимого интерфейса из того многообразия, которое представлено в иерархии интерфейсов. Имеется существенное расхождение между идентификацией класса и интерфейса. Эти различия связаны с тем, что классы используются внутри одного и того же модуля, а интерфейсы - в различных модулях. Для того чтобы создать класс с заданными свойствами, его имя просто указывается перед конструктором. Программист сам следит за тем, чтобы имена различающихся классов не совпадали, а при их совпадении - чтобы вызывался конструктор нужного класса. При работе с несколькими модулями такой подход невозможен, поскольку модули могут создаваться разными разработчиками в разное время.

Если бы интерфейсы различались только по именам, то при случайном совпадении имен(а это происходило бы довольно часто; имя обычно несет в себе смысловую нагрузку) двух интерфейсов, реализованных в разных модулях, вместо одного модуля загружался бы другой. Поэтому для идентификации интерфейса используется структура типа GUID(Globally Unique Identifier - глобально уникальный идентификатор), которая имеет размер 16 байт(128 бит). Единственный тип данных, который предопределен для интерфейса, - это GUID. Каждый СОМ-интерфейс содержит собственный идентификатор GUID. Если разработчик реализует новый интерфейс, то этот интерфейс обязательно должен иметь GUID, причем уникальность должна соблюдаться не только в рамках данного компьютера разработчика, но и для всего мира. Эта глобальная уникальность достигается путем генерации GUID как псевдослучайного числа по алгоритму, определенному консорциумом Open Systems Foundation(сейчас он носит название Open Group) и использующему некоторые специфические характеристики данного компьютера(такие, как МАС-адрес сетевого адаптера). Алгоритм гарантирует, что все сгенерированные новые значения GUID будут отличаться от полученных ранее, даже если они генерируются на разных компьютерах.

Описанная выше структура интерфейса естественно решает первую проблему экспорта объектов между модулями - каждый интерфейс однозначно определяется своим идентификатором GUID, имеет вполне определенный список методов с вполне определенными параметрами и условиями вызова. Таким образом, имеется однозначный протокол вызова методов, и это гарантирует корректность передаваемых данных и сохранность стека.

СОМ-сервер

Модель СОМ предоставляет возможность создания многократно используемых компонентов, независимых от языка программирования. Такие компоненты называются СОМ-серверами и представляют собой исполняемые файлы(ЕХЕ) или динамически загружаемые библиотеки(DLL), специальным образом оформленные для обеспечения возможности их универсального вызова из любой программы, написанной на поддерживающем СОМ языке программирования. При этом СОМ-сервер может выполняться как в адресном пространстве вызывающей программы(внутрипроцессный сервер - in-process server), так и в виде самостоятельного процесса(внепроцессный сервер - out-of-process server) или даже на другом компьютере(в этом случае говорят о распределенной модели СОМ - Distributed COM, а сервер называют удаленным). СОМ автоматически разрешает вопросы, связанные с передачей параметров(маршалингом - marshalling) и согласованием моделей потоков клиента и сервера.

СОМ-сервер - это специальным образом оформленное и зарегистрированное приложение, которое позволяет клиентам создавать реализованные на сервере объекты.

Сервер в виде исполняемого файла

Сервер в виде исполняемого файла представляет собой обычный исполняемый файл Windows, в котором реализована возможность создания СОМ-объектов по запросу других приложений. Примерами таких серверов являются приложения Microsoft Office.

СОМ и потоки выполнения

Поскольку Windows - многопоточная и многозадачная операционная система, СОМ-клиент и СОМ-сервер могут оказаться в различных процессах(processes) или потоках выполнения(threads) приложения, и к серверу может обращаться несколько клиентов. Технология СОМ решает эту проблему при помощи концепции апартаментов(apartments), в которых выполняются СОМ-клиенты и СОМ-серверы. Апартаменты бывают однопоточные(Single Threaded Apartments, STA), многопоточные(Multiple Threaded Apartments, MTA) и нейтральные(Neutral apartment).

При создании однопоточного апартамента организуется очередь вызовов методов, и каждый из них обрабатывается только после того, как будут обработаны все предшествующие вызовы. STA, за редким исключением, является наиболее подходящим выбором для реализации СОМ-серверов. Использовать MTA есть смысл только в том случае, если STA не подходит для конкретного сервера. Внутри многопоточного апартамента может быть создано сколько угодно потоков и объектов, причем каждый объект не привязывается к какому-то конкретному потоку, и любой метод объекта может быть вызван в любом из потоков. СОМ автоматически ведет пул потоков внутри MTA и при вызове со стороны клиента находит свободный поток, в котором вызывает метод требуемого объекта. СОМ-сервер, работающий в МТА, обладает потенциально более высоким быстродействием и доступностью для клиентов, однако он значительно сложнее в разработке. Нейтральные апартаменты используются при создании серверов СОМ+. Методы объектов в таких апартаментах вызываются в потоке, из которого к ним обратился клиент. Это позволяет уменьшить количество переключений потоков.

Активация сервера

Для активации СОМ-сервера клиент должен вызвать функцию CreateComObject, описанную в модуле ComObj.pas:

function CreateComObject(const ClassID: TGUID): IUnknown;

Функция получает в качестве параметра CLSID требуемого объекта и возвращает ссылку на его интерфейс IUnknown.

Далее клиент может запросить требуемый интерфейс и работать с ним.

var

COMServer: ICOMServer;

// Создаем СОМ-объект и запрашиваем у него интерфейс

COMServer := CreateComObject(IComServer) as IComServer;

// Работаем с интерфейсом

ComServer.DoSomething;

// Освобождаем интерфейс

ComServer := nil;

Что же делает СОМ при запросе на создание сервера?

1. В реестре по запрошенному идентификатору CLSID ищется запись регистрации сервера.

2. В этой записи находится имя файла модуля сервера.

- Если это исполняемый файл - он запускается на выполнение. Любое приложение, реализующее СОМ-сервер при старте, регистрирует в системе интерфейс фабрики классов. После запуска и регистрации СОМ получает ссылку на фабрику классов. Фабрика классов - это СОМ-сервер, реализующий интерфейс IClassFactory. Ключевым методом этого интерфейса является метод CreateInstance, который и создает экземпляр требуемого объекта.

- Если это библиотека, она загружается в адресное пространство вызвавшего процесса и вызывается ее функция DllGetClassObject, возвращающая ссылку на реализованную в DLL фабрику классов.

3. СОМ вызывает метод CreateInstance и передает полученный интерфейс клиенту.

По завершении работы с СОМ-объектом клиент освобождает ссылку на него(что приводит к вызову метода Release). В этот момент СОМ-сервер проверяет, есть ли еще ссылки на созданные им объекты. Если все объекты освобождены, то СОМ-сервер завершает свою работу. В случае если сервер реализован в виде DLL, он должен экспортировать функцию DllCanUnloadNow, которая вызывается СОМ по таймеру или при вызове функции CoFreeUnusedLibraries. Если все объекты из этой библиотеки освобождены, то она выгружается из памяти. Вся работа по созданию и регистрации фабрики объектов и экспорту соответствующих функций из DLL в Delphi уже реализована в составе стандартных библиотек, поэтому создание СОМ-сервера в действительности является очень простой задачей.

Поддержка Delphi стандартных интерфейсов СОМ

В Delphi уже имеется ряд классов, реализующих интерфейсы, необходимые для создания стандартных СОМ-объектов - серверов автоматизации и элементов управления ActiveX:

TComObject TTypedComObject TAutoObject TActiveXControl

Поскольку интерфейсы, реализуемые в этих объектах, могут быть затребованы другими модулями, каждому из них необходима своя фабрика классов. Эти фабрики классов также определены и реализованы в классах:

TComObjectFactory TTypedComObjectFactory

TAutoObjectFactory TActiveXControlFactory

Класс TComObject реализует два интерфейса - IUnknown и ISupportErrorInfo. Последний используется для передачи информации об ошибках СОМ-клиенту. Этот класс требуется мастеру Delphi, когда разработчик на странице ActiveX объектов выбирает значок COM Object, предварительно выбрав в меню команду File New Other. В классе TTypedComObject добавляется поддержка интерфейса IProvideClassInfo, который имеет единственный(по сравнению с IUnknown) дополнительный метод - GetClassInfo. Этот метод возвращает указатель на интерфейс ITypeInfo, который, как уже говорилось, используется для получения информации о библиотеки типов. Начиная с этого класса, уже можно описывать СОМ-объекты с библиотеками типов. В следующем классе - TautoObject - добавляется реализация интерфейса IDispatch. Именно этот класс требуется мастеру Delphi при выборе на странице ActiveX окна объектов(открывается командой File New Other) значка Automation Object. И наконец, в классе TActiveXControl добавляется реализация интерфейсов IConnectionPointContainer, IDataObject, IObjectSafery, IOleControl, IOleInPlaceActiveObject, IOleInPlaceObject, IOleObject, IPerPropertyBrowsing, IPersistPropertyBag, IPersisStorage, IPersistStreamInit, IQuickActivate, ISimpleFrameSite, ISpecifyPropertyPages, IViewObject, IViewObject2, необходимых для поддержки элементов управления ActiveX.

Автоматизация Word

Программные идентификаторы и объектная модель Microsoft Word.

Объекты непосредственно доступные приложению-контроллеру, представлены в табл. 2.

Таблица 2. Объекты Word, доступные непосредственно приложению-контроллеру.

Объект

Программный идентификатор

Комментарий

Application

Word.Application, Word.Application.9(10)

С помощью этого программного идентификатора создается экземпляр Word без открытых документов

Document

Word.Document, Word.Document.9(10), Word.Template.8

С помощью этого программ. идентификатора создается экземпляр Word с одним вновь созданным документом

Все остальные объекты Word являются так называемыми внутренними(internal) объектами. Это означает, что они не могут быть созданы сами по себе; так, объект Paragraph(абзац) не может быть создан отдельно от содержащего его документа.

Отметим, что последнее число в программном идентификаторе объекта соответствует номеру версии продукта (9 - Microsoft Office 2000, 10 - Microsoft Office XP).

Если вспомнить, что основное назначение приложения Word - работа с документами, можно легко понять иерархию его объектной модели.

Рис.1. Иерархия основных объектов Word

Основным объектом в ней, как и в объектных моделях других приложений Microsoft Office, является объект Application, содержащий коллекцию Documents объектов типа Document. Каждый объект типа Document содержит коллекцию Paragraphs, коллекцию Characters объектов типа Character и т.п. Манипуляция документами, абзацами, символами, закладками реально осуществляется путем обращения к свойствам и методам этих объектов.

Создание и открытие документов Microsoft Word

Создать новый документ Word можно, используя метод Add коллекции Documents объекта Application:

App.Documents.Add;

Для открытия уже существующего документа следует воспользоваться методом Open коллекции Documents:

App.Documents.Open(`путь к файлу:\полное имя файла');

Отмечу, что свойство ActiveDocument объекта Word.Application указывает на текущий активный документ среди одного или нескольких открытых. Помимо этого, к документу можно обращаться по его порядковому номеру с помощью метода Item:

App.Documents.Item(№);

Отмечу, что нумерация членов коллекции в Microsoft Office начинается с единицы. Сделать документ активным можно с помощью метода Activate:

App.Documents.Item(№).Activate;

Сохранение, печать и закрытие документов Microsoft Word.

Закрытие документа может быть осуществлено с помощью метода Close одним из следующих способов:

App.Documents.Item(№).Close;

App.ActiveDocument.Close;

Просто сохранить документ, не закрывая его, можно с помощью метода Save:

App.ActiveDocument.Save;

Вывод документа на устройство печати можно осуществить с помощью метода PrintOut объекта Document:

App.ActiveDocument.PrintOut;

Вставка текста и объектов в документ и форматирование текста.

Для создания абзацев в документе можно использовать коллекцию Paragraph объекта Document, представляющую собой набор абзацев данного документа. Добавить новый абзац можно с помощью метода Add этой коллекции:

App.ActiveDocument.Paragraph.Add;

Для вставки собственно текста в документ применяется не объект Paragraph, а объект Range, представляющий любую непрерывную часть документа(в том числе и вновь созданный абзац). Этот объект может быть создан разными способами. Например, можно указать начальный и конечный символы диапазона(если таковые имеются в документе):

var

Rng : Variant;

Rng := App.ActiveDocument.Range(2. 4);

// со 2-го по 4-й символы

Можно также указать номер абзаца(например, только что созданного):

Rng := App.ActiveDocument.Paragraphs.Item(1).Range;

е того, можно указать несколько последовательных абзацев:

Rng := App.ActiveDocument.Range

(App.ActiveDocument.Paragraphs.Item(3).Range.Start.

App.ActiveDocument.Paragraphs.Item(5).Range.End)

Создание таблиц

Создавать таблицы можно двумя способами. Первый заключается в вызове метода Add коллекции Tables объекта Document и последовательном заполнении ячеек данными. Этот способ при позднем связывании работает довольно медленно.

Второй способ, который намного «быстрее», заключается в создании текста из нескольких строк, содержащих подстроки с разделителями(в качестве разделителя можно использовать любой или почти любой символ, но нужно, чтобы он заведомо не встречался в данных, которые в дальнейшем будут помещены в таблицу), и последующего преобразования такого текста в таблицу с помощью метода ConvertToTable объекта Range. Ниже приведен пример создания таблицы из трех строк и трех столбцов этим способом(в качестве разделителя, являющегося первым параметром метода ConvertToTable, используется запятая):

var

Rng: Variant;

Rng := App.Selection.Range;

Rng.Collapse(wdCollapseEnd);

Rng.InsertAfter(`1, 2, 3');

Rng.InsertParagraphAfter;

Rng.InsertAfter(`4, 5, 6');

Rng.InsertParagraphAfter;

Rng.InsertAfter(`7, 8, 9');

Rng.InsertParagraphAfter;

Rng.ConvertToTable(`,');

Отмечу, что внешний вид таблицы можно изменить с помощью свойства Format, а также с помощью свойств коллекции Columns, представляющей колонки таблицы, и коллекции Rows, представляющей строки таблицы(объекта Table).

Создание отчета по базам данных с помощью приложений Office

Генерировать отчеты по базам данных с помощью приложений Microsoft Office приходится на практике довольно часто. Причиной этого является желание пользователей получать отчеты в виде файла одного из стандартных форматов, иметь возможность редактировать их и обмениваться ими с клиентами и партнерами. Дело в том, что входившие в комплект поставки Delphi вплоть до версии 7 компоненты QuickReport обладали весьма ограниченными возможностями, связанными с созданием отчетов в одном из стандартных форматов, и применение вместо них в качестве составной части корпоративного решения приложений Microsoft Office, как правило, уже имевшихся в компании, нередко было предпочтительнее приобретению профессиональных генераторов отчетов типа Crystal Reports(Crystal Decisions).

Хотя с появлением в составе Delphi 7 более приемлемого с точки зрения функциональности генератора отчетов Rave Reports проблема сохранения отчетов из приложений Delphi в стандартных форматах была частично решена, приложения Microsoft Office по-прежнему широко применяются для этой цели.

Практическая часть

Ниже я приведу один из простейших примеров создания отчетов по базам данных с помощью Microsoft Word. Для этой цели создам новый проект, помещу на его форму компонент TADOConnection, компонент TADODataSet, компонент WordApplication и конечно же компонент TButton.

Рис.

Для создания отчета буду использовать информацию из заранее созданной базы данных Microsoft Access.

Рис.

Реализуем генерацию табличного отчета в обработчике событий OnClick компонента Button1:

var

vr:olevariant;

begin

try

statusLabel.Caption:='Формирую отчет ждите';

winit;

w1.Connect;

vr:=GetCurrentDir+'\Отчет.doc';

W1.Documents.Open(vr,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,EmptyParam,EmptyParam);

//выбираем первую надпись

vr:='Text Box 8';

w1.ActiveDocument.Shapes.Item(vr).Select(EmptyParam);

//пишем туда текст

w1.Selection.TypeText('Отчет');

//переходим в конец документа

vr:=wdStory;

w1.Selection.EndKey(vr,EmptyParam);

//переходим в верхний колонтитул

w1.ActiveWindow.ActivePane.View.SeekView:=wdSeekCurrentPage

Header;

vr:='Text Box 5';

w1.Selection.HeaderFooter.Shapes.Item(vr).Select(EmptyParam);

w1.Selection.TypeText('');

w1.ActiveWindow.ActivePane.View.SeekView:=wdSeekMainDocument;

ADODataSet1.Close;

ADODataSet1.CommandText:='SELECT [Main].[Tel], '+

'[Main].[name], '+

'[Main].[House], '+

'[Korp].[NameKorp], '+

'[Flat].[NameFlat], '+

'[Ul].[NameUl] '+

' FROM Main, Ul, Korp, Flat '+

'WHERE([Main].[IdUl]=[Ul].[IdUl])And [Main].[IdKorp]=[Korp].[IdKorp]) And ([Main].[IdFlat]=[Flat].[IdFlat]) ';

ADODataSet1.Open;

//Настраиваем шрифты

{WFTitle.Size:=15;

WFTitle.Bold:=1;

WFTableTitle.Size:=13;

WFtext.Size:=10;}

//настраиваем параметры экспорта

ADODataSet1.fields[0].DisplayLabel:='Телефон'; //заголовок

ADODataSet1.fields[0].tag:=round(w1.CentimetersToPoints(2)); //ширина столбца

ADODataSet1.fields[0].Visible:=true;//отображать поле

ADODataSet1.fields[1].DisplayLabel:='ФИО'; //заголовок

ADODataSet1.fields[1].tag:=round(w1.CentimetersToPoints(10)); //ширина столбца

ADODataSet1.fields[1].Visible:=true;//отображать поле

ADODataSet1.fields[2].DisplayLabel:='Дом'; //заголовок

ADODataSet1.fields[2].tag:=round(w1.CentimetersToPoints(1.5));//ширина столбца

ADODataSet1.fields[2].Visible:=true;//отображать поле

ADODataSet1.fields[3].DisplayLabel:='Корпус'; //заголовок

ADODataSet1.fields[3].tag:=round(w1.CentimetersToPoints(1.5));//ширина столбца

ADODataSet1.fields[3].Visible:=true;//отображать поле

ADODataSet1.fields[4].DisplayLabel:='Квартира'; //заголовок

ADODataSet1.fields[4].tag:=round(w1.CentimetersToPoints(1.5));//ширина столбца

ADODataSet1.fields[4].Visible:=true;//отображать поле

ADODataSet1.fields[5].Visible:=false;//не отображать поле

//вызываем процедуру экспорта

TableExport(ADODataSet1,'Живущие на улице Ахметова','АХМЕТОВА');

TableExport(ADODataSet1,'Живущие на улице Летчиков','ЛЕТЧИКОВ');

//отображаем Word. Это можно было сделать и вначале, но

//тогда бы долго загружалось

w1.Visible:=true;

w1.Disconnect;

statusLabel.Caption:='';

except

on e:exception do begin

w1.Visible:=true;

statusLabel.Caption:='Отчет был сформирован неверно';

w1.Disconnect;

raise Exception.Create('Ошибка формирования отчета.'+#13+e.Message);

end;

end;

end;

Рис.

Рис.

Рис.

Рис.

Итак, мы научились создавать отчеты по базам данных с помощью Microsoft Word.

Заключение

Исходя из изложенного материала могу сделать следующие выводы, что одним из главных достоинств Delphi является поддержка технологий СОМ.

Итак, COM (Component Object Model) - это объектная модель компонентов. Технология СОМ применяется при описании API и двоичного стандарта для связи объектов различных языков и сред программирования. СОМ предоставляет модель взаимодействия между компонентами и приложениями. Она работает с так называемыми СОМ-объектами. СОМ-объекты похожи на обычные объекты визуальной библиотеки компонентов Delphi. В отличие от объектов VCL Delphi, СОМ-объекты содержат свойства, методы и интерфейсы. Обычный СОМ-объект включает в себя один или несколько интерфейсов. Каждый из этих интерфейсов имеет собственный указатель.

Преимущества СОМ:

· Все преимущества объектно-ориентированного проектирования программ. Разработчик может организовать проект в виде СОМ объектов, а затем определить интерфейсы каждого объекта.

· Общий подход к созданию всех типов программных сервисов. Находит нужное программное обеспечение в библиотеке, в другом процессе, в операционной системе. Сглаживает различия между системным и прикладным программным обеспечением.

· Безразличен язык программирования. СОМ определяет двоичный интерфейс, который должны поддерживать объекты. Объекты СОМ можно создавать на любом языке, способном поддерживать данный интерфейс.

· Замена текущей версии программ на новую, с дополнительными возможностями, не повредив существующим клиентам старой версии. Способность СОМ-объекта поддерживать более одного интерфейса - ключ к решению этой проблемы.

Но наряду с большим количеством преимуществ, технология СОМ, как и все в это мире имеет и свои недостатки:

· Технология COM - сложная технология. Сложная как в концепции, так и в реализации.

· Технология COM - неполна. Неполна в том смысле, что она разрабатывалась "снизу", как средство "склеивания модулей в единую конструкцию".

· И наконец одним из основных недостатков технологии СОМ является ее жесткая привязка к платформе WinTel (Windows/Intel). Таким образом, успешное использование СОМ-объектов в самых разнообразных программных средах Windows вовсе не гарантирует возможности его применения на платформе UNIX. He так давно компания Microsoft сделала попытку перенести СОМ на платформы, отличные от Windows, однако вопрос об успехе этого предприятия пока остается открытым.

Библиографический список

1.Деннинг А, ActiveX для профессионалов / А.Деннинг. - СПб.: Питер, 1998.

2.Бокс Д, Сущность технологии СОМ. Библиотека программиста / Д.Бокс -СПб.: Питер, 2001.

3.Елманова Н. Delphi и технология СОМ. / Н. Елманова, С. Трепалин, А. Тенцер. - СПб.: Питер, 2003.

Размещено на Allbest.ru


Подобные документы

  • Методика создания приложений передающих данные в Microsoft Word. Технология взаимодействия приложений с текстовым редактором Microsoft Word. Создание и использование экземпляров серверов автоматизации. Взаимодействие с сервером на уровне документа.

    курсовая работа [120,7 K], добавлен 26.03.2010

  • Microsoft Word — текстовый процессор, предназначенный для создания, просмотра и редактирования текстовых документов с использованием таблично-матричных алгоритмов. Область применения Microsoft Excel; общие операции над листами и ячейками рабочей книги.

    реферат [2,5 M], добавлен 23.02.2012

  • Microsoft Word: достоинства и недостатки, алгоритм установки. Требование к аппаратным и программным средствам. Особенности работы с таблицами: создание, редактирование текста, добавление элементов, преобразование, сортировка данных, вычисление формул.

    курсовая работа [2,5 M], добавлен 16.06.2011

  • Понятие геоинформационных систем, их основное предназначение. Анализ возможностей Microsoft Word, разработка пригласительного билета. Особенности создания формы базы данных "Библиотека". Возможности текстовых редакторов, использование электронных таблиц.

    контрольная работа [1,2 M], добавлен 07.05.2012

  • История создания. Windows 9x/NT. Операционная система Microsoft Windows. Преимущества и недостатки Windows. Некоторые клавиатурные комбинации Windows 9x и NT. Windows XP Professional. Наиболее совершенная защита.

    реферат [19,3 K], добавлен 18.07.2004

  • Понятие и назначение электронных таблиц. Сравнительная характеристика редакторов электронных таблиц Microsoft Excel, OpenOffice.org Calc, Gnumeric. Требования к оформлению электронных таблиц. Методика создания электронных таблиц в MS Word и MS Excel.

    контрольная работа [1,5 M], добавлен 07.01.2015

  • Операционная система Windows, офисные приложения, такие как Microsoft Word, Microsoft Excel, ABBY FineReader. Глобальные компьютерные сети.

    реферат [52,3 K], добавлен 16.11.2003

  • Історія операційної системи Windows. Характеристика операційної системи Microsoft Windows XР. Робочий стіл. Файлова система і структура даних. Загальні відомості про текстовий редактор Microsoft Word. Адаптація до вимог користувача. Редагування тексту.

    реферат [28,2 K], добавлен 20.11.2013

  • Основы работы операционной системы Windows XP. Работа в текстовом процессоре Microsoft Word: ввода, редактирования и форматирования текста, автоматизации разработки документа, создания графических объектов, создания комплексного текстового документа.

    курсовая работа [3,6 M], добавлен 25.04.2009

  • Особенности создания документа в MS Word. Форматирование его по заданным требованиям и выполнение основных действий с файлами. Особенности работы с объектами MS Word. Внедрение интегрированной информационной системы управления персоналом предприятием.

    лабораторная работа [27,6 K], добавлен 22.01.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.