Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc200 / MIOLE.DOC
Скачиваний:
27
Добавлен:
01.08.2013
Размер:
72.19 Кб
Скачать

Лабораторная работа № 3

Работа с OLE-серверами в Borland C++Builder

Цель работы: изучить основные приемы управления OLE-серверами из Borland C++Builder.

OLE-сервером называется приложение, способное обрабатывать запросы макроязыка OLE. Приложение, обращаюшееся к OLE-серверу, называется OLE-клиентом (OLE-контроллером) [5]. К OLE-серверам относятся, в частности, все приложения MS Office. Они поддерживают технологию OLE2, называемую также COM. Работа с OLE-серверами осуществляется путем обращения к ним через GUID (Globally Unique Identifier) - идентификаторы OLE-объектов (в том числе приложений, документов, их компонентов и т.д.), занесенные в реестр Windows. Существуют два основных способа получения GUID и работы с ними:

  1. получение GUID на этапе компиляции и фиксация их в коде приложения-клиента;

  2. автоматизированное получение GUID в процессе выполнения приложения в результате обращения к функциям OLE, осуществляющим поиск GUID по именам OLE-объектов.

Основные недостатки: для второго способа - серьезные временные затраты на обращение к OLE-функциям, для первого - неуниверсальность при обращении к серверам MS Office разных версий, причиной которых является уникальность GUID даже для различных версий одного приложения.

Существует два пути реализации первого способа:

  1. Использование поставляемых с MS Office библиотек типов *.OLB. При этом соответствующая библиотека присоединяется к проекту через меню C++Builder: ProjectèImport Type Library, после чего созданные файлы *.CPP и *.H автоматически присоединяются к проекту.

  2. В Borland C++Builder 5 - использование компонент закладки Servers [1, 2]. Эти компоненты выполняют работу с OLE-серверами. Генерируются эти компоненты автоматически во время установки C++Builder с настройкой на версию MS Office: 97/2000.

Второй способ реализуется путем использования возможностей объекта Variant. Этот способ достаточно устойчив, надежен и универсален для версий MS Office от 97 и выше (MS Office 95 имеет некоторые недоработки в плане поддержки OLE). Недостаток низкой производительности в случае необходимости интенсивного обращения к серверу и передачи большого количества данных минимизируется путем обращения к макросам Visual Basic.

Ниже приведены примеры работы с объектами MS Excel при помощи Variant:

#include <utilcls.h>

...

Variant MSExcel, MyBook, MySheet;

...

try

{ // Получить указатель на активный объект. MSExcel - загружен

MSExcel = Variant::GetActiveObject("Excel.Application");

}

catch (...)

{

MSExcel = Variant::CreateObject("Excel.Application");

}

MSExcel.OlePropertySet ( "Visible", true );

...

// Создание новой книги

Variant MSBooks;

MSBooks = MSExcel.OlePropertyGet ("Workbooks");

MyBook = MSBooks.OleFunction ( "Add" );

...

// Создание страницы

Variant Sheets;

Sheets = MyBook.OlePropertyGet ("Worksheets");

MySheet = Sheets.OleFunction ("Add");

...

// Заполнение таблицы

Variant Range;

Range = MySheet.OlePropertyGet ( "Range", "B2" );

Range.OlePropertySet ( "FormulaR1C1", "1" );

...

// Создание диаграммы

Variant Charts, Chart, Ch, Range;

Charts = MySheet.OlePropertyGet ("ChartObjects");

Chart = Charts.OleFunction ( "Add", 300, 20, 300, 400 );

Ch = Chart.OlePropertyGet ( "Chart" );

Range = MySheet.OlePropertyGet ( "Range", "A2:B17" );

Ch.OleProcedure ( "SetSourceData", Range, "xlColumns" );

Таким образом, все обращение к OLE-серверу сводится к использованию функций Variant OlePropertyGet, OlePropertySet, OleFunctoin, OleProcedure.

Задание. Разработать визуальное приложение, позволяющие выполнять операции согласно варианту задания.

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

Вариант 2. Создание нового листа книги. Генерация таблицы из двух столбцов: порядковый номер и значение (в качестве значения можно взять, например, арифметическую или геометрическую прогрессию, последовательность Фибоначчи и пр.). Сохранение листа в виде БД формата DBF. Вычисление суммарного значения в столбце, выбранном пользователем, с занесением в его последнюю ячейку.

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

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

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

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

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

Вариант 8. Создание нового листа книги. Генерация таблицы из двух столбцов: порядковый номер и значение (в качестве значения можно взять, например, арифметическую или геометрическую прогрессию, последовательность Фибоначчи и пр.). Вычисление дисперсии в столбце, выбранном пользователем, с занесением в его последнюю ячейку. Печать листа. Сохранение книги.

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

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

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

Вариант 12. Создание нового листа книги. Генерация таблицы из двух столбцов: порядковый номер и значение (в качестве значения можно взять, например, арифметическую или геометрическую прогрессию, последовательность Фибоначчи и пр.). Построение диаграммы по таблице. Вычисление дисперсии в столбце, выбранном пользователем, с занесением в его последнюю ячейку. Печать таблицы. Сохранение книги.

Требования к отчету.

  1. Титульный лист.

  2. Цель работы.

  3. Задание в соответствии с вариантом.

  4. Листинги.

  5. Экранная форма.

  6. Сформированный лист.

  7. Результаты выполнения функции печати (если требуется в соответствии с заданием).

  8. Выводы. Краткая характеристика основных результатов выполненной работы. Обязательно отметить встретившиеся особенности или проявления некорректной работы OLE-сервера!

Соседние файлы в папке doc200