Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

converted to PDF by HupBaH9I

GETOBJECT([FileName ][, ClassName])

Параметр FileName позволяет указать имя существующего файла (и при необходимости путь к нему), содержащего OLE-объект, который необходимо активизировать. С помощью параметра ClassName можно указать имя объекта верхнего уровня (класс OLE-объекта). Это необходимо в том случае, если, как мы это показали на примере Microsoft Excel, в приложении в одном файле может храниться несколько объектов верхнего уровня, например таблицы, графики и т. д. В данном случае для параметра должен использоваться следующий синтаксис:

<<"Имя приложения">>.<<"Имя объекта верхнего уровня">> Например:

oSht = GETOBJECT("C:\VFP\SAMPLE\VAT.XLS","EXCEL.SHEET")

В Visual Basic и соответственно Access мы можем использовать аналогичные функции, но для обеспечения ссылки на объект необходимо применять оператор Set, как показано в следующих примерах:

` В первом примере создаем объект MS Excel Dim oExlApp As Object

' Объявляем переменную для ссылки на объект

Set oExlApp = CreateObject("Excel.Application") ` Создаем объект

oExlApp.Visible = True ' Выводим объект на экран

...

oExlApp.Quit ' После окончания работы закрываем Excel Set oExlApp = Nothing ' Стираем ссылку на объект из памяти ` Во втором примере ссылаемся на объект MS Excel

Dim oExlApp As Object

Set oExlApp = GetObject("C:\VFP\SAMPLE\VAT.XLS","Excel.Sheet")

...

Set oExlApp = Nothing

Управление объектами Excel

Для того чтобы остановиться на проблемах взаимодействия пользовательского приложения с объектами Excel, нам придется более подробно обсудить специфические в данном случае особенности работы функций CREATEOBJECT() и GETOBJECT(). Поэтому систематизируем необходимые данные для важнейших объектов верхнего уровня Microsoft Excel и приведем их в табл. 10.2.

Таблица 10.2. Поведение объектов верхнего уровня Microsoft Excel

Объект Функция

Описание поведения

Application CreateObject Всегда запускает невидимую копию Microsoft Excel. Файл

рабочей книги не загружается.

GetObject Если параметр FileName

представляет собой пустую строку, запускается новая невидимая копия Microsoft Excel без загрузки файла рабочей книги. Если параметр пропущен, то

предпринимается попытка получить ссылку на уже запущенную копию Microsoft Excel и в случае неудачи генерируется ошибка. Не

указывайте в параметре FileName имя файла. Для

этого случая используйте объекты Sheet или Chart.

Sheet или CreateObject Если не существует

 

converted to PDF by HupBaH9I

Chart

запущенной копии Microsoft

 

Excel, то запускается

 

невидимая копия и создается

 

рабочая книга с именем

 

"Object" и один рабочий лист

 

с именем "Sheet1". Для

 

объекта Chart помимо этого

 

создается еще один рабочий

 

лист с именем "Chart1". Как

 

только ссылка на созданный

 

объект перестает

 

существовать (стирается),

 

рабочая книга удаляется, но

 

Excel остается загруженным в

 

памяти компьютера. Если

 

одна или несколько копий

 

Microsoft Excel уже

 

запущены, то добавляется

 

рабочая книга с

 

параметрами, как это было

 

описано в предыдущем

 

абзаце. В случае, когда уже

 

работает несколько копий

 

Excel, предугадать, в какой

 

из них будет добавлена

 

таблица, невозможно.

GetObject

Если параметр FileName

 

является допустимым

 

(существующим) именем

 

файла и Microsoft Excel не

 

запущен, то запускается

 

новая невидимая его копия с

 

невидимой рабочей книгой.

 

Если хотя бы одна копия

 

Microsoft Excel уже запущена,

 

рабочая книга открывается в

 

ней. При этом будет

 

получена ошибка, если

 

указанное в функции имя

 

файла совпадет с уже

 

открытым файлом в

 

загруженной копии Excel.

 

Если параметр FileName

 

задан в виде пустой строки

 

("") и если не существует

 

запущенной копии Microsoft

 

Excel, то запускается

 

невидимая ее копия и

 

создается рабочая книга с

 

именем "Object" и один

 

рабочий лист с именем

 

"Sheet1". Если параметр

 

FileName задан в виде пустой

 

строки ("") и если хотя бы

 

одна копия Microsoft Excel

 

загружена в память, то в

 

одной из них открывается

 

рабочая книга, как это было

 

описано выше. Если

 

параметр FileName не указан,

 

всегда генерируется ошибка.

Как вы можете заметить, изучив табл. 10.2, создание объектов OLE Automation или обращение к ним в Microsoft Excel зачастую может привести к совершенно различным последствиям. Почти

converted to PDF by HupBaH9I

всегда Excel создает невидимую копию приложения. Для того чтобы сделать ее видимой для пользователя, надо присвоить свойству Visible объекта Application значение "истина":

...Application.Visible = .T.

Если создается невидимая копия рабочей книги, то сделать ее видимой можно, присвоив значение "истина" свойству Visible окна:

...Window(n).Visible = .T.

В некоторых случаях Excel при запуске посредством OLE Automation не открывает новый файл. Тогда это придется сделать с помощью метода Add коллекции Workbooks:

...Workbooks.Add

Для завершения обсуждения проблем, связанных с объектами верхнего уровня Microsoft Excel, приведем несколько примеров.

Объект Application

oApp = CREATEOBJECT("EXCEL.APPLICATION") oApp = GETOBJECT(" ","EXCEL.APPLICATION")

Любая из этих строк приведет к запуску новой копии Excel в скрытом виде.

oApp = GETOBJECT(,"EXCEL.APPLICATION")

Обеспечит ссылку на текущее приложение Excel. Если же Excel на компьютере не запущен, будет сгенерировано сообщение об ошибке.

Объект Sheet

oExSheet = CREATEOBJECT("EXCEL.SHEET") FOR nVal = 1 TO 10

oExlSheet.Cells(nVal, nVal).Value = nVal * nVal ENDFOR

*Если хотите увидеть результат, уберите комментарий в следующий строке

*oExlSheet.Application.Visible = .T.

oExlSheet.SaveAs("TEMP.XLS")

Создает новый рабочий лист в запускаемой невидимой копии Excel и заполняет его цифрами так, как это показано на рис. 10.4. Созданная таблица сохраняется в файле TEMP.XLS в папке, установленной по умолчанию для Excel.

converted to PDF by HupBaH9I

Рис. 10.4. oExlSheet = GETOBJECT("RAS_1.XLS", "EXCEL.SHEET") oExlSheet.Range("G2").Value = 16 oExlSheet.Range("G3").Value = 10 oExlSheet.Parent.Save && Сохраняем рабочую книгу

? oExlSheet.Range("G4").Value

Создает ссылку на первый рабочий лист в файле RAS_1.XLS. Файл в данном случае должен располагаться в папке, указанной по умолчанию для приложения, использующего OLE Automation, иначе необходимо указать путь к нему. В этот файл, содержащий результаты расчетов, мы заносим новые данные в ячейки G2 и G3, сохраняем данные, а затем выводим результат вычислений из ячейки G4, где записана формула, вычитающая G3 из G2.

Объект Chart

oExlChart = CREATEOBJECT("EXCEL.CHART")

* Стираем данные по умолчанию на рабочем листе со значениями oExlChart.Parent.Sheets(2).Range("A1:D10").Clear

FOR nVal = 1 TO 10

* Заполняем таблицу новыми значениями oExlChart.Parent.Sheets(2).Cells(nVal,1).Value = nVal oExlChart.Parent.Sheets(2).Cells(nVal,2).Value = nVal * nVal

NEXT

*Строим график по новым значениям по колонкам oExlChart.ChartWizard(oExlChart.Parent.Sheets(2).Range("A1:B10"),,,2)

*Смотрим, что получилось

oExlChart.Application.Visible = .T. WAIT

Создается новый рабочий лист с диаграммой. Сначала мы аполняем необходимыми данными второй рабочий лист, на котором размещаются данные. Затем с помощью метода ChartWizard обновляем диаграмму на первом рабочем листе. В методе ChartWizard из большого числа параметров мы устанавливаем только область данных и условие построения его по колонкам. Остальные параметры принимают значения по умолчанию. После этого выводим Excel на экран и используем команду WAIT для того, чтобы рабочая книга не была выгружена после завершения работы программы.

oExlChart = GETOBJECT("RAS_1.XLS", "EXCEL.CHART") oExlChart.ChartTitle.Text = "Результаты продаж"

Создает ссылку на первый рабочий лист с диаграммой в файле RAS_1.XLS. В файле должен быть предварительно создан объект Chart с помощью команды Chart в меню Insert.

Управление объектами Word for Windows

converted to PDF by HupBaH9I

При работе с объектами Word for Windows функция CREATEOBJECT() запускает новую копию приложения только в том случае, если на компьютере это приложение еще не работает. При этом функция GETOBJECT() не может использоваться для ссылки на документ. Если она используется

в виде

oWrd = GETOBJECT(" ","WORD.BASIC")

то ее применение аналогично функции CREATEOBJECT().

Задание функции в виде

oWrd = GETOBJECT(,"WORD.BASIC")

всегда приводит к ошибке.

В отличие от Excel текстовый процессор Word for Windows имеет только один объект OLE Automation - WordBasic (в синтаксисе мы пишем Word.Basic). Это означает, что управлять документом Word из другого приложения мы можем только посредством выполнения команд

WordBasic.

Для того чтобы продемонстрировать пример создания объекта Word, решим классическую для любого начинающего программиста задачу - выведем на экран слово "Hello!" В связи с тем, что

читатель одиннадцатой главы этой внушительной по объему книги вряд ли захочет относить себя к начинающим программистам, усложним задачу. Загрузим на компьютере Word и Access. Теперь, находясь в Access, напишем заветное слово в документе Word.

Для решения этой задачи в контейнере БД Access перейдем на вкладку Модули. На панели инструментов нажмем кнопку Вставить процедуру. В появившемся диалоговом окне напишем ее название, например CallWord. В окне Модуль напишем следующий код:

Public Function CallWord() As Integer Dim oWbApp As Object

Set oWbApp = CreateObject("Word.Basic") oWbApp.FileNew ` Открываем новый документ oWbApp.Insert "Hello!" ` Вписываем в документ слово

Set oWbApp = Nothing Exit Function

End Function

Запустите этот модуль на выполнение. Напоминаем простейший способ сделать это - нажмите кнопку на панели инструментов Окно отладки и в появившемся окне наберите имя процедуры, после чего нажмите клавишу Enter. Смело переходите в Word и рассматривайте появившееся там слово.

Если вас испугало многообразие объектов в Excel и вы уже обрадовались наличию в Word всего одного объекта, то, возможно, ваша радость преждевременна. При управлении документом Word с помощью OLE Automation есть одна существенная для программиста неприятность.

Команды WordBasic используют поименованные аргументы, а посредством OLE Automation ссылаться на аргументы можно только по их положению. Например, вы хотите отключить вывод предупреждения при сохранении документа. В файле контекстной справки WordBasic вам будет подсказан следующий синтаксис команды ToolsOptionsSave

ToolsOptionsSave [.CreateBackup = number] [, .FastSaves = number] [, .SummaryPrompt = number]

В макросе Word вы, соответственно, можете написать: ToolsOptionsSave .SummaryPrompt = False

Для того чтобы выполнить эту команду из OLE-контроллера, необходимо знать порядковый номер этого аргумента в команде:

oWbApp.ToolsOptionsSave , , 0

10.3. Использование OLE Automation для передачи данных

В практике создания систем автоматизации обработки данных программисту очень часто приходится сталкиваться с задачей графического представления данных. В комплекте со всеми средствами разработки Microsoft поставляется специальная утилита Microsoft Graph 5.0, которая как нельзя лучше подходит для этих целей.

В этом параграфе мы расскажем, как в пользовательском приложении можно использовать Microsoft Graph 5.0, а также остановимся на основных возможностях графического представления

converted to PDF by HupBaH9I

данных, которые предоставляет Microsoft Excel.

С помощью Microsoft Graph 5.0 мы можем легко встроить в форму в виде OLE-объекта графики самого разнообразного вида, которые помогут пользователю лучше разобраться с тенденциями изменения интересующих его показателей. MS Graph 5.0 имеет интуитивно понятный интерфейс, разобраться с которым в крайнем случае поможет обширная справочная информация. Но если мы

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

На рис. 10.5 представлена иерархическая схема объектов MS Graph 5.0, а в табл. 10.3 - их краткое описание.

Таблица 10.3. Описание объектов MS Graph 5.0

Объект

Описание

Application

Содержит установки в целом для

 

приложения

Axis

Горизонтальные или вертикальные оси

 

графика

AxisTitle

Заголовок одной из осей графика

Border

Рамка

Chart

График

ChartArea

Область графика, которая простирается

 

и за внешние границы области, в

 

которой вычерчивается график (поля,

 

заголовки осей, описания данных и т. д.)

ChartGroup

Группа серий данных, представленных в

 

виде одного графика. Простейший

 

график содержит один объект ChartGroup

ChartTitle

Заголовок графика

DataLabel

Дополнительное описание для графика

 

одной серии данных (может иметь

 

отношение ко всей серии или к одной

 

точке)

DownBars

Прямоугольник, который на линейном

 

графике соединяет значение одной

 

серии данных с более низким значением

 

другой серии данных

DropLines

Вертикальные линии, соединяющие

 

точки графика со значениями на оси Y

ErrorBars

Линии, графически отображающие

 

ошибку расчета значения в графиках X-Y

Floor

Координатная поверхность, служащая

 

основанием для трехмерного графика

Font

Шрифт

GridLines

Линии координатной сетки

HiLoLines

Вертикальные линии, которые соединяют

 

максимальное и минимальное значения

 

для различных серий данных

Interior

Графическое оформление (фон, тень и т.

 

д.)

Legend Описание серии данных для графика

LegendEntry Наименование серии данных, которое

берется из колонки с данными и может быть изменено только на листе с данными

LegendKey Обозначения для серии данных

PlotArea Область непосредственного

расположения графика Point Точка в серии данных

converted to PDF by HupBaH9I

Series Серия данных

SeriesLines Линия для обозначения серии данных TickLabels Значения для засечек на оси графика TrendLine Линия тренда

UpBars Прямоугольник, который на линейном

графике соединяет значение одной серии данных с более высоким значением другой серии данных

Walls Боковые координатные поверхности для

трехмерных графиков

Перечисленные 27 объектов позволяют достаточно гибко программировать внешний вид графиков, предоставляя доступные для них свойства и методы, список которых приведен в табл. 10.4. Все объекты имеют свойства Application (возвращает имя приложения, создавшего объект), Creator (возвращает идентификатор приложения, создавшего объект - для Apple Macintosh) и Parent (возвращает имя родительского объекта), поэтому они не указаны в таблице.

Таблица 10.4. Свойства и методы объектов MS Graph 5.0

Объект

Свойства

Методы

Application ChartWizardDisplay, HasLink,

SaveAsOldExcelFile-Format

 

Name, Visible, Chart, Quit

 

Axis

AxisBetweenCategories,

Delete

 

AxisGroup, AxisTitle, Border,

 

 

Crosses, CrossesAt,

 

 

HasMajorGridlines,

 

 

HasMinorGridlines, HasTitle,

 

 

MajorGridlines,

 

 

MajorTickMark, MajorUnit,

 

 

MajorUnitIsAuto,

 

 

MaximumScale,

 

 

MaximumScaleIsAuto,

 

 

MinimumScale,

 

 

MinimumScaleIsAuto,

 

 

MinorGridlines,

 

 

MinorTickMark, MinorUnit,

 

 

MinorUnitIsAuto,

 

 

ReversePlotOrder, ScaleType,

 

 

TickLabelPosition, TickLabels,

 

 

TickLabelSpacing,

 

 

TickMarkSpacing, Type

 

AxisTitle

Border, Caption, Font,

Delete

 

HorizontalAlignment, Interior,

 

 

Left, Name, Orientation,

 

 

Shadow, Text, Top,

 

 

VerticalAlignment

 

Border

Color, ColorIndex, LineStyle,

-

 

Weight

 

Chart

Area3DGroup, AutoScaling,

BarGroups, ChartGroups,

 

Bar3DGroup, ChartArea,

ChartWizard, ColumnGroups,

 

ChartTitle, Column3DGroup,

Delete, DoughnutGroups,

 

Corners, DepthPercent,

LineGroups, OmitBackground,

 

DisplayBlanksAs, Elevation,

PieGroups, RadarGroups,

 

Floor, GapDepth, HasAxis,

SeriesCollection, SetEchoOn,

 

HasLegend, HasTitle,

XYGroups

 

HeightPercent, Legend,

 

 

Line3DGroup, Perspective,

 

Pie3DGroup, PlotArea,

PlotVisibleOnly,

RightAngleAxes, Rotation,

SizeWithWindow, SubType,

SurfaceGroup, Type, Walls,

WallsAndGridlines2D,

 

 

converted to PDF by HupBaH9I

 

ApplyDataLabels,

 

 

AreaGroups, AutoFormat,

 

 

Axes

 

ChartArea

Border, Font, Height, Interior, Clear, ClearContents,

 

Left, Name, Shadow, Top,

ClearFormats, Copy

 

Width

 

Chart-

AxisGroup,

SeriesCollection

Group

DoughnutHoleSize,

 

 

DownBars, DropLines,

 

 

FirstSliceAngle, GapWidth,

 

 

HasDropLines, HasHiLoLines,

 

 

HasRadarAxisLabels,

 

 

HasSeriesLines,

 

 

HasUpDownBars, HiLoLines,

 

 

Overlap, RadarAxisLabels,

 

 

SeriesLines, SubType, Type,

 

 

UpBars, VaryByCategories

 

ChartTitle

Border, Caption, Font,

Delete

 

HorizontalAlignment, Interior,

 

 

Left, Name, Orientation,

 

 

Shadow, Text, Top,

 

 

VerticalAlignment

 

DataLabel

AutoText, Border, Caption,

Delete

 

Font, HorizontalAlignment,

 

 

Interior, Left, Name,

 

 

NumberFormat, Orientation,

 

 

Shadow, ShowLegendKey,

 

 

Text, Top, Type,

 

 

VerticalAlignment

 

DownBars Border, Interior, Name

Delete

DropLines Border, Name

Delete

ErrorBars

Border, EndStyle, Name,

Delete

 

Clear Formats

 

Floor

Border, Interior, Name

Clear Formats

Font

Background, Bold, Color,

-

 

ColorIndex, FontStyle, Italic,

 

 

Name, OutlineFont, Shadow,

 

 

Size, Strikethrough,

 

 

Subscript, Superscript,

 

 

Underline

 

GridLines

Border, Name

Delete

HiLoLines

Border, Name

Delete

Interior

Color, ColorIndex,

-

 

InvertIfNegative, Pattern,

 

 

PatternColor,

 

 

PatternColorIndex

 

Legend

Border, Font, Height, Interior, Clear, ClearContense, Copy,

 

Left, Name, Position, Shadow, Delete, LegendEntries

 

Top, Width

 

Legend-

Font, Index, LegendKey

Delete

Entry

 

 

LegendKey Border, Interior,

ClearFormats, Delete

 

InvertIfNegative,

 

 

MarkerBackgroundColor,

 

 

MarkerBackgroundColorIndex,

 

 

MarkerForegroundColor,

 

 

MarkerForegroundColorIndex,

 

 

MarkerStyle, Smooth

 

PlotArea

Border, Font, Height, Interior, ClearFormats

 

Left, Name, Top, Width

 

Point

Border, DataLabel, Explosion,

ApplyDataLabels,

Соседние файлы в предмете Программирование на Delphi