Что такое объект ole в excel

Содержание

  1. OLEObjects object (Excel)
  2. Remarks
  3. Example
  4. Methods
  5. Properties
  6. See also
  7. Support and feedback
  8. Using ActiveX Controls on Sheets
  9. Добавление элементов управления с помощью Visual Basic
  10. Использование свойств элемента управления с Visual Basic
  11. Использование имен элементов управления с коллекциями shapes и OLEObjects
  12. Поддержка и обратная связь
  13. OLEObjects.Add method (Excel)
  14. Syntax
  15. Parameters
  16. Return value
  17. Example
  18. Support and feedback
  19. Объект OLEObjects (Excel)
  20. Замечания
  21. Пример
  22. Методы
  23. Свойства
  24. См. также
  25. Поддержка и обратная связь

OLEObjects object (Excel)

A collection of all the OLEObject objects on the specified worksheet.

Each OLEObject object represents an ActiveX control or a linked or embedded OLE object.

An ActiveX control on a sheet has two names: the name of the shape that contains the control, which you can see in the Name box when you view the sheet, and the code name for the control, which you can see in the cell to the right of (Name) in the Properties window.

When you first add a control to a sheet, the shape name and code name match. However, if you change either the shape name or code name, the other is not automatically changed to match. The latter however, seems to have changed with Excel versions. With version 16.0 both are kept consistent and is not possible to change one of the two alone.

Example

Use the OLEObjects method of the Worksheet object to return the OLEObjects collection.

The following example hides all the OLE objects on worksheet one.

Use the Add method to create a new OLE object and add it to the OLEObjects collection. The following example creates a new OLE object representing the bitmap file Arcade.bmp and adds it to worksheet one.

The following example creates a new ActiveX control (a list box) and adds it to worksheet one.

You use the code name of a control in the names of its event procedures. However, when you return a control from the Shapes or OLEObjects collection for a sheet, you must use the shape name, not the code name, to refer to the control by name. For example, assume that you add a check box to a sheet and that both the default shape name and the default code name are CheckBox1. If you then change the control code name by typing chkFinished next to (Name) in the Properties window, you must use chkFinished in event procedures names, but you still have to use CheckBox1 to return the control from the Shapes or OLEObject collection, as shown in the following example.

Methods

Properties

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Using ActiveX Controls on Sheets

В этом разделе рассматриваются конкретные сведения об использовании элементов ActiveX на листах и листах диаграмм. Общие сведения о добавлении элементов управления и работе с ними см. в разделах Использование элементов ActiveX в документе и Создание настраиваемого диалогового окна.

При работе с элементами управления на листах учитывайте следующие моменты:

Помимо стандартных свойств, доступных для элементов ActiveX, с элементами ActiveX в Microsoft Excel можно использовать следующие свойства: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell и ZOrder.

Эти свойства можно задать и вернуть с помощью имени элемента activeX. В следующем примере окно книги прокручивается, поэтому CommandButton1 находится в левом верхнем углу.

Некоторые методы и свойства Microsoft Excel Visual Basic отключаются при активации элемента ActiveX. Например, метод Sort нельзя использовать, когда элемент управления активен, поэтому следующий код завершается ошибкой в процедуре события нажатия кнопки (так как элемент управления по-прежнему активен после его щелчка пользователем).

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

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

При сохранении книги Microsoft Excel в формате файла книги Microsoft Excel 5.0/95 сведения об элементе управления ActiveX теряются.

Ключевое слово Me в процедуре события для элемента ActiveX на листе ссылается на лист, а не на элемент управления .

Добавление элементов управления с помощью Visual Basic

В Microsoft Excel элементы activeX представлены объектами OLEObject в коллекции OLEObjects (все объекты OLEObject также находятся в коллекции Shapes ). Чтобы программно добавить элемент ActiveX на лист, используйте метод Add коллекции OLEObjects . В следующем примере на лист 1 добавляется кнопка команды.

Использование свойств элемента управления с Visual Basic

Чаще всего код Visual Basic будет ссылаться на элементы ActiveX по имени. В следующем примере изменяется заголовок элемента управления с именем CommandButton1.

Обратите внимание, что при использовании имени элемента управления вне модуля класса для листа, содержащего элемент управления, необходимо указать имя элемента управления именем листа.

Чтобы изменить имя элемента управления, используемое в коде Visual Basic, выберите элемент управления и задайте свойство (Name) в окно свойств.

Так как элементы ActiveX также представлены объектами OLEObject в коллекции OLEObjects , можно задать свойства элемента управления с помощью объектов в коллекции. В следующем примере задается левое положение элемента управления с именем CommandButton1.

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

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

Использование имен элементов управления с коллекциями shapes и OLEObjects

Элемент ActiveX на листе имеет два имени: имя фигуры, содержащей элемент управления, которое отображается в поле Имя при просмотре листа, и кодового имени элемента управления, которое отображается в ячейке справа от (Имя) в окно свойств. При первом добавлении элемента управления на лист имя фигуры и код совпадают. Однако при изменении имени фигуры или кодового имени другое не будет автоматически изменено на соответствие.

Имя кода элемента управления используется в именах его процедур событий. Однако при возврате элемента управления из коллекции Shapes или OLEObjects для листа необходимо использовать имя фигуры, а не код, чтобы ссылаться на элемент управления по имени. Например, предположим, что вы добавили флажок на лист и что имя фигуры по умолчанию и код по умолчанию — CheckBox1. Если затем изменить имя кода элемента управления, введя chkFinished рядом с (Name) в окно свойств, необходимо использовать chkFinished в именах процедур событий, но вам все равно придется использовать CheckBox1 для возврата элемента управления из коллекции Shapes или OLEObject, как показано в следующем примере.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

OLEObjects.Add method (Excel)

Adds a new OLE object to a sheet.

Syntax

expression.Add (ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

expression A variable that represents an OLEObjects object.

Parameters

Name Required/Optional Data type Description
ClassType Optional Variant You must specify either ClassType or FileName. A string that contains the programmatic identifier for the object to be created. If ClassType is specified, FileName and Link are ignored.
FileName Optional Variant You must specify either ClassType or FileName. A string that specifies the file to be used to create the OLE object.
Link Optional Variant True to have the new OLE object based on FileName be linked to that file. If the object isn’t linked, the object is created as a copy of the file. The default value is False.
DisplayAsIcon Optional Variant True to display the new OLE object either as an icon or as its regular picture. If this argument is True, IconFileName and IconIndex can be used to specify an icon.
IconFileName Optional Variant A string that specifies the file that contains the icon to be displayed. This argument is used only if DisplayAsIcon is True. If this argument isn’t specified or the file contains no icons, the default icon for the OLE class is used.
IconIndex Optional Variant The number of the icon in the icon file. This is used only if DisplayAsIcon is True and IconFileName refers to a valid file that contains icons. If an icon with the given index number doesn’t exist in the file specified by IconFileName, the first icon in the file is used.
IconLabel Optional Variant A string that specifies a label to display beneath the icon. This is used only if DisplayAsIcon is True. If this argument is omitted or is an empty string («»), no caption is displayed.
Left Optional Variant The initial coordinates of the new object, in points, relative to the upper-left corner of cell A1 on a worksheet, or to the upper-left corner of a chart.
Top Optional Variant The initial coordinates of the new object, in points, relative to the top of row 1 on a worksheet, or to the top of the chart area on a chart.
Width Optional Variant The initial width of the new object, in points.
Height Optional Variant The initial height of the new object, in points.

Return value

An OLEObject object that represents the new OLE object.

Example

This example creates a new Microsoft Word OLE object on Sheet1.

This example adds a command button to sheet one.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Объект OLEObjects (Excel)

Коллекция всех объектов OLEObject на указанном листе.

Замечания

Каждый объект OLEObject представляет элемент управления ActiveX или связанный или внедренный объект OLE.

Элемент ActiveX на листе имеет два имени: имя фигуры, содержащей элемент управления, которое отображается в поле Имя при просмотре листа, и кодового имени элемента управления, которое отображается в ячейке справа от (Имя) в окно свойств.

При первом добавлении элемента управления на лист имя фигуры и код совпадают. Однако при изменении имени фигуры или кодового имени другое не будет автоматически изменено на соответствие. Последнее, однако, похоже, изменилось с версиями Excel. В версии 16.0 оба варианта поддерживают согласованность и невозможно изменить один из двух вариантов в одиночку.

Пример

Используйте метод OLEObjects объекта Worksheet , чтобы вернуть коллекцию OLEObjects .

В следующем примере все объекты OLE скрываются на одном листе.

Используйте метод Add , чтобы создать объект OLE и добавить его в коллекцию OLEObjects . В следующем примере создается новый объект OLE, представляющий точечный файл Arcade.bmp, и добавляет его на лист.

В следующем примере создается новый элемент ActiveX (поле списка) и он добавляется на первый лист.

Имя кода элемента управления используется в именах его процедур событий. Однако при возврате элемента управления из коллекции Shapes или OLEObjects для листа необходимо использовать имя фигуры, а не код, чтобы ссылаться на элемент управления по имени. Например, предположим, что вы добавили флажок на лист и что имя фигуры по умолчанию и код по умолчанию — CheckBox1. Если изменить имя кода элемента управления, введя chkFinished рядом с (Name) в окно свойств, необходимо использовать chkFinished в именах процедур событий, но по-прежнему необходимо использовать CheckBox1 для возврата элемента управления из коллекции Shapes или OLEObject, как показано в следующем примере.

Методы

Свойства

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

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

1. связывание
и внедрение

2. использование
OLE

Связывание

При
связывании файлов образуется связь
между файлом-источником и фай¬лом-приемником.
Источником может быть, например, лист
Excel, часть которо¬го или весь лист
используется в файле-приемнике WORD Пока
будет су¬ществовать связь между этими
двумя документами, любые изменения в
диа¬грамме Excel (исходные данные) будут
отражены в документе WORD (связан¬ные
данные). Рабочая таблица на самом деле
не является частью документа WORD, это
просто окно, через которое вы можете
видеть рабочую таблицу Ex¬cel. Если обновить
данные в файле-источнике, скажем в
рабочей таблице Excel, то эти данные
автоматически обновятся во всех связанных
с этой таблицей до¬кументах. Еще одним
преимуществом связывания является
экономия размера файла-приемника, т.е.
с одним файлом-приемником может быть
связано не¬сколько объектов, которые
при вставке в файл резко увеличили бы
его объем.

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

Часто
файлы-источники хранятся на сервере, и
любое количество пользовате¬лей может
установить связь с ними. Пока
документы-приемники связаны с файлами
на сервере, все хорошо. Но если вашему
коллеге в другом конце стра¬ны нужен
файл с вашего компьютера, то при пересылке
необходимо будет пе¬редать все
файлы-источники и установить новые
связи, так как местоположе¬ние папки,
содержащей файлы-источники, будет
изменено. В этом случае луч¬шим выбором
будет второе средство ОLЕ — внедрение.

Внедрение

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

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

Для
связи и внедрения объектов можно
воспользоваться следующими способами:

1. выполнить
команду «Копировать» в буфер и
воспользоваться диалоговым окном
«Специальная вставка»

2. вставить
объект с помощью команд «Объект» и
«Рисунок» из меню «Встав¬ка»

3. переместить
объект с помощью мыши непосредственно
из приложения — ис¬точника в приложение
— приёмник (возможно, с использованием
Рабочего стола в качестве промежуточного
пункта).

Окно
«Специальная вставка» примет другой
вид в нашей задаче. Охарактеризу¬ем
его.

В
верхней части окна — Источник окно «Как»
помогает выбрать тип сведений (формата)
для специальной вставки. Если нужно
получить после вставки точ¬ную копию
объекта с возможностью его последующего
редактирования, то вы¬брать формат
«Объект Документ МS Word». Если нужна
точная копия объекта, но изменения
вносится не будут, то формат Рicturе
позволит уменьшить размер файла, что
особенно важно при передаче данных.
Формат Тех1 подходит, когда нужно вставить
только основной текст, а форматирование
будет осуществлять¬ся средствами
приложения — приёмника. Описанное выше
справедливо для внедрения. Если в
диалоговом окне установить параметр
«Связать», то сохра¬нится возможность
выбора трех форматов для вставки, но
только один позво¬лит вставить объект
корректно — это формат объект Документ
МS Word.

Диалоговое
окно Связи

Можно
получить информацию о связанном объекте,
выбрав пункт Связи из ме¬ню Правка.

В
окне списка Исходный файл приведена
информация о всех связях в докумен¬те
с указанным именем файлов, а также
методов обновления для каждого фай¬ла.
Можно также установить обновление связи
по запросу вместо принятого по умолчанию
автоматического обновления. Используя
командные кнопки в пра¬вой части
диалогового окна, можно обновить связь
по запросу, открыть в при¬ложении —
источнике, изменить источник или
разорвать связь между приложе¬нием —
источником и объектом. В случае разрыва
связи копия объекта будет восстановлена
в файл — приёмник. Разорванная связь
может быть восстановле¬на только в
случае повтора полного процесса установки
связи. В дополнение к диалоговому окну
Специальная вставка, связь или внедрение
объекта в документ МS Offiсе возможны по
командам меню Вставка, отра¬жающим
названия различных типов объектов.
Связывание файла состоит из указания
полного имени файла и установки параметра
Связать с файлом, в) Обмен данными между
приложениями. При использовании метода
drag & drор рекомендуется расположить
горизонтально два окна приложения
одно¬временно. Чтобы освободить
пространство окно можно убрать ПИ и
строку со-стояния. Иногда при использовании
метода drag& drор данные перемещаются
или копируются (Сtrl), а иногда внедряются.

Использование
фрагментов для передачи данных. Данные
в виде текста или диапазонов ячеек можно
хранить в виде фрагментов на Рабочем
столе. Фраг¬менты имеют свои атрибуты,
которые могут быть изменены с помощью
коман¬ды Свойства. Фрагменты хранятся
в папке WindowsРабочий стол.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

OLE

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

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

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

Элемент управления OLE

Элемент управления OLE (панель элементов управления) используется для связывания /внедрения объектов в приложениях Visual Basic. Контекстное меню OLE содержит команды:

  • вырезать, копировать, вставить, удалить,
  • перенести
  • вставить объект (имеется список объектов для выбора и возможность выбора типа вставки),
  • специальная вставка — при выборе этой команды выводится диалоговое окно, где отображаются имеющиеся в наличии классы объектов. Имеется возможность сделать выбор — связь/внедрение; имеется возможность использования вместо объекта пиктограммы,
  • создать связь, создать внедренный объект.

Не все команды отображаются или являются доступными; это зависит от состояния приложения и буфера обмена. Некоторые параметры элемента управления OLE даны в табл. 6.1.

Таблица
6.1.
Некоторые свойства, методы и события элемента управления OLE

Свойства Пояснения
Action Выполняемое действие. Недоступно во время разработки, возможны установочные значения в пределах 0 — 18; среди них: 0 — создаeт внедрeнный объект, 1 — создаeт связанный объект, 7 — открывает объект, 15 — отображает окно Специальная вставка, 18 — сохраняет OLE и т.д. Некоторые действия Action реализованы как методы
AutoActivate Определяет когда активизируется объект (после двойного щелчка, после получения фокуса и т.д.)
AutoVerbMenu Должно ли выводиться контекстное меню
Class Идентифицирует приложение, которое создаeт OLE-объект (например, Word)
HostName Содержит имя приложения, создавшего объект
ObjectVerbs Список команд, применимых к OLE-объекту
ObjectVerbsCount Количество таких команд (см. выше)
OLEType Возвращает состояние OLE-объекта в контейнере: связанный/внедрeнный
OLETypeAllowed Задание связывания, внедрения или обоих
SizeMode Возвращает и задаeт режим согласования размеров элемента управления OLE и загружаемого в него объекта
SourceDoc Имя файла, где находится объект (или который должен быть загружен в OLE-контейнер)
SourceItem Указывает на данные объекта, которые будут связаны
Verb Определяет вид действия, которое будет выполнено при активизации объекта с помощью свойства Action
UpdateOptions Когда содержимое объекта OLE может быть обновлено
Методы
Close Закрыть объект, завершить связывание с приложением, где он был создан
Copy Копирование из контейнера OLE в буфер обмена
CreateEmbed Внедрение объекта в OLE-контейнер. CreateEmbed (Action = 0) создает внедренный объект, CreateLink (Action = 1) создает cвязанный объект
CreateLink Создание связываемого объекта, пользуясь содержимым заданного файла
Delete Удалить объект
DoVerb Открыть объект для выполнения над ним одного из действий
Paste Вставить объект в OLE-контейнер из буфера обмена
Updаte Обновление объекта в OLE-контейнере (на основании данных приложения, посредством которого объект редактируется)
События
ObjectMove Происходит после изменений размеров или перемещения объекта, бывшего в OLE-контейнере
Updated Происходит после изменения данных в объекте

Приложение OLE-сервер определяет множество операций (команд), которые могут выполняться над поставляемым им объектом. Каждый объект поддерживает собственный набор команд. Этот набор может изменяться во время работы приложения. OLE-объект получает список команд от приложения-сервера и доступ к этому списку команд осуществляет через свои свойства ( AutoVerbMenu, Verb, ObjectVerbs, ObjectVerbsCount ). Эти свойства доступны во время выполнения.

Практическая работа 41. OLE

41а. Элементарная операция OLE

Последовательность действий:

  • Создать на форме элемент управления OLE для создания, например, связанного объекта,
  • создать соответствующий файл, например, A:ole1.xls (см. код, данный ниже),
  • ввести код, данный ниже,
  • стартовать проект, сделать щелчок на форме, наблюдать результат.
Private Sub Form_Click()
OLE1.Class = "Worksheet" ' приложение Excel
OLE1.SourceDoc = "A:ole1.xls" ' имя файла
' использовать указанный блок данных
OLE1.SourceItem = "A1A3:B1B3" 
OLE1.Action = 1 ' создать связанный объект
End Sub

41в. OLE

Рассматривается загрузка объектов (см. процедуру Form_Load () в OLE-контейнер и реализация (по желанию пользователя) связывания/внедрения (см. процедуру Public Sub LinkEmb(FileName As String, Embed As Boolean) ). Последовательность действий:

  1. создать объекты: текстовый файл (приложение Word), таблицу (приложение Excel), базу данных (приложение Access), рисунок (приложение Paint),
  2. создать на форме элемент управления OLE (Name = ole1), два переключателя (Name = opt1 и opt2 соответственно, Caption = Link и Embed cоответственно), командную кнопку (Name = cmd1, Caption = Load Object), поле списка (Name = lst), табл. 6.1.
  3. ввести код данный ниже, стартовать проект,
  4. маркировать в поле списка lst, элемент, например, «Docum.Word», сделать щелчок на требуемом переключателе (Link или Embedding), затем сделать щелчок на командной кнопке «Load Object». В поле элемента OLE выводится соответствующий файл,
  5. сделать двойной щелчок в поле OLE на введeнном объекте.

В зависимости от того, какой переключатель использован (Link или Embed), вставленный объект выводится или в приложении Word для редактирования, или появляется возможность редактировать его средствами того приложения, в котором он находится. В случае Link внесeнные (пользователем) изменения остаются в исходном файле. Это можно проверить, загрузив файл в приложение Word.

' создать список объектов для загрузки в OLE-контейнер
Private Sub Form_Load()
With lst
.AddItem ("Docum.Word")
.AddItem ("Table.Excel")
.AddItem ("Picture.Paint")
.AddItem ("Database.Access")
End With
End Sub
' выбор загружаемого объекта (маркировать его в списке, см.:
' Select Case lst.ListIndex) и определение режима 
' связывание/внедрение с учётом состояния переключателей 
Private Sub cmd1_Click()
Select Case lst.ListIndex
Case 0: LinkEmb "A:nin.doc", opt1.Value
Case 1: LinkEmb "A:nin.xls", opt1.Value
Case 2: LinkEmb "A:nin.bmp", opt1.Value
Case 3: LinkEmb "A:nin.mdb", opt1.Value
End Select
End Sub
' в зависимости от значений переданных аргументов
'реализовать связь/внедрение
Public Sub LinkEmb(FileName As String, Embed As Boolean)
If Embed Then
ole1.CreateEmbed FileName
Else
ole1.CreateLink FileName
End If
End Sub

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В одной из статей, посвященных работе с Excel в Delphi читатель с ником Kanti задал весьма не тривиальную задачку — как добраться до диаграммы Excel, внедренной в документ Word и работать с ней. За что Kanti большое человеческое спасибо — приятно, когда читатели интересуются жизнью блога и предлагают новые темы и идеи.
На первый взгляд задача довольно не простая. Однако решение для неё есть. Я пошел немного дальше в решении проблемы и сегодня расскажу вам:

  • как работать с объектом Excel, внедренном в документ Word
  • как работать с документом Word, внедренным в Excel.

План статьи:

  • Азы работы с MS Word в Delphi
  • Как работать с объектом Excel, внедренном в документ Word
  • Как работать с документом Word, внедренным в Excel

Прежде, чем начать изложение основного материала, следует упомянуть некоторые моменты работы с Word, т.к. в блоге я их не касался, но эти основы пригодятся для освоения основного материала статьи.

1. Азы работы с MS Word в Delphi

Запуск MS Word в принципе ни чем не отличается от запуска MS Excel за одним небольшим исключением — меняется параметр функции CreateOLEObject:

MyWord:=CreateOleObject('Word.Application');

Но, чтобы не повторяться дважды я расскажу ещё один дополнительный момент, который Вам пригодиться для дальнейшей работы: как подключиться к уже выполняющемуся приложению MS Office, чтобы не создавать лишних копий процессов.

Для того, чтобы подключиться к уже запущенному приложению достаточно использовать функцию GetActiveOleObject, единственным параметром которой является имя класса. Например, чтобы подключиться к запущенному приложению MS Word необходмо выполнить:

MyExcel:=GetActiveOleObject('Word.Application')

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

try
  MyWord:=GetActiveOleObject('WordApplication');
except
  MyWord:=CreateOleObject('Word.Application');
end;

Для того, чтобы открыть уже имеющийся документ Word необходимо воспользоваться методом Open объекта Documents, например так:

MyWord.Documents.Open('myword.doc');

После того как документ открыт, Вы можете его редактировать, изменять текст, параметры страницы и т.д., но сегодня нам это не важно. Главное сегодня — научиться работать с объектами. И с этого момента начинается решение первой задачи.

2. Как работать с объектом Excel, внедренном в документ Word

Каждый документ Word имеет коллекцию Shapes, которая позволяет добавлять в документ объекты, созданные и отображаемые с помощью программ-серверов OLE (OLE-серверов). OLE-объекты в документах Word могут отображаться также, как они отображаются в приложениях, предназначенных для их создания и редактирования. Все наверно пользовались редактором формул Math Type? Вот вам простой OLE-сервер. Добавляете OLE-объект формулы  в документ — открывается окно Math Type где вы вводите то, что хотите увидеть и потом формула отображается в документе Word.

Другое дело, когда Вы пробуете вставить в документ Word, например файл mp3. В этом случае объект будет отображен в документе в виде ярлыка, но, тем не менее будет внесен в коллекцию Shapes и до него можно будет добраться из Delphi.

insert_objectТеперь попробуем посмотреть как выглядит добавление OLE-объектов. В простейшем случае Вы открываете Word, создаете документ и выбираете «Правка — Вставить — Объект» и перед Вами открывается окно с перечнем всех OLE-объектов, которые Вы можете использовать в документе. Выбираете объект, вставляете в документ — работаете. Обратите внимание на рисунок — в окне на рисунке как раз отображены всевозможные объекты нашего с Вами исследования.

Для того, чтобы вставить OLE-объект в документ Word из Delphi необходимо воспользоваться методом AddOleObject коллекции Shapes, который имеет следующий вид:

Shapes.AddOleObject(ClassType, FileName, LinkToFile, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Range)

ClassType — имя, используемое для включения указанного объекта OLE. Например, чтобы вставить в документ Word диаграмму Excel следует использовать

для добавления листа Excel, соответственно:

и так далее. В принципе ничего сложного нет — вставить можно, что угодно, хоть exe-файл :)

FileName — имя файла, из которого должен быть создан объект. Если этот аргумент опущен, то используется текущая папка. Вы должны указать либо ClassType либо  FileName, но никак не одновременно оба параметра.

LinkToFile True для того, чтобы связать OLE-объект с файлом, из которого он был создан. False, чтобы сделать объект OLE-объект независимым от копии файла, т.е. включить объект в документ Word. Если Вы определили значение для ClassType, аргумент LinkToFile должны быть ложными. Значение по умолчанию False.

DisplayAsIcon True для отображения объекта OLE в виде значка. Значение по умолчанию False.

IconFileName — Файл, который содержит значок для отображения объекта OLE.

IconIndex -индекс иконки отображения из IconFileName. Значение по умолчанию — ноль.

IconLabel — подпись к иконке объекта.

Range — диапазон,  где объект OLE будет размещен в тексте. Объект OLE заменяет выбранный диапазон. Если этот аргумент опущен, объект вставляется автоматически (в текущую позицию курсора в документе).

Давайте теперь продемонстрируем использование этого метода на практике и, заодно, приготовим плацдарм для дальнейшей работы. Рассмотрим как можно вставить чистый лист Excel в документ Word. Причем вставим лист в нужные нам координаты и зададим ему (листу) длину и ширину:

var MyWord: OLEVariant;
  begin
    MyWord:=CreateOleObject('Word.Application');  
    MyWord.Visible:=true;
    MyWord.Documents.Open(doc);
    MyWord.ActiveDocument.Shapes.AddOLEObject(ClassType:='Excel.Sheet',Left:=10, Top:=10, Width:=400, Height:=300);
  end;

Как видите, вместо того, чтобы указать объект Range мы просто расписали его параметры Left, Top, Width и Height. После выполнения этих операций в документе doc аккурат в верху страницы вставиться лист Excel.

Теперь, когда лист вставлен, можно приступать к дальнейшему изучению «глубин» OLE-серверов Microsoft.

Создадим новую переменную, в которой будем хранить ссылку на OLE-объект.

и сразу получим ссылку на наш лист Excel в Word’е:

MyOLE:=MyWord.ActiveDocument.Shapes.Item(1);

Так будет проще разбираться и избавит нас от лишней писанины.

Представим себе, что мы ничего абсолютно не знаем про то, что лежит в MyOLE. Знаем только то, что это элемент из коллекции Shapes и все. Как определить, что мы получили ссылку именно на объект Excel, а не на автофигуру или, ещё хуже, не на файл mp3?

Для того, чтобы получить всю необходимую информацию об OLE-объекте достаточно обратиться к объекту MS Word под названием OLEFormat.

OLEFormat имеет следующие свойства:

Свойство Описание
Application Возвращает имя приложения к которому относится объект. В нашем случае вернет «Microsoft Word»
ClassType Возвращает или устанавливает тип класса для указанного объекта OLE, фотографии или поля.
Creator Возвращает 32-битное целое число, которое указывает на приложение в котором был создан объект.
DisplayAsIcon True, если указанный объект отображается в виде значка. Свойство для чтения/записи
IconIndex Возвращает или устанавливает индекс иконки, используемой если DisplayAsIcon True.
IconLabel Возвращает или устанавливает подпись к иконке OLE-объекта.
IconName Возвращает или устанавливает файл программы, в которой хранится икона для объекта OLE.
IconPath Возвращает путь к файлу, в котором хранится иконка для объекта OLE
Label Возвращает строку, которая используется, чтобы определить часть исходного файла для связывания объектов
Object Возвращает объект, который представляет собой объект верхнего уровня интерфейса указанного объекта OLE
Parent Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat
ProgID Возвращает программный идентификатор (ProgID) для указанного объекта OLE.

Теперь, используя эти свойства, попробуем получить всю необходимую нам информацию об OLE-объекте.

Вызовем последовательно свойства ClassType и ProgID:

ShowMessage(MyOle.OLEFormat.ClassType);
ShowMessage(MyOle.OLEFormat.ProgID);

В моем случае, результатом выполнения операций были две одинаковых строки «Excel.Sheet.12» Так как у меня установлен Office 2007 то версия 12, что и отразилось в сообщениях. У Вас это могут быть 10, 11 или как у меня 12 версии. С помощью номера версии можно будет определять — возможно ли в принципе изменять такие объекты на машине пользователя или нет.

Идем дальше. Итак, мы определили, что объект представляет собой лист Excel. Как получить доступ к Excel? И причем сделать это так, чтобы можно было наш OLE-объект изменить?

Обратимся к свойству Object. Согласно описанию, свойство должно вернуть нам ссылку на объект верхнего уровня. Следовательно, применительно к нашей ситуации — это будет ссылка на объект Excel. Чтобы убедиться в сказанном, сделаем так:

ShowMessage(MyOle.OLEFormat.Object.Application.Name);

то есть получим имя приложения в котором был создан объект. В результате получим сообщение в виде строки «Microsoft Excel«.

Ну, а теперь развязка вопроса — используя ссылку на Excel попробуем написать что-нибудь на листе, например, избитую фразу «Hello World!»:

MyOle.OLEFormat.Object.Application.ActiveSheet.Range['A1'].Value:='Hello World!';

Можете проверить — в ячейку А1 запишется строка. Здесь следует обратить внимание на то, что при записи в Excel мы не использовали свойства ActiveWorkBook, которое обычно предшествует свойству ActiveSheet. Все дело в том, что среди объектов OLE Office нет такого OLE-объекта — вставляется только лист либо диаграмма. По сути диаграмма — это два листа Sheet где на одном находится сам график, а на втором — данные к нему.

Вот таким простым и достаточно понятным способом можно добавлять, изменять и удалять OLE-объекты. Кстати, на досуге можете потренироваться вставлять, активировать, редактировать сразу несколько различных OLE-объектов — принцип работы тот же. Получаете Object и используете его функции.

3. Как работать с документом Word, внедренным в Excel.

Надо сказать, что разработчики в Microsoft весьма неплохо потрудились, чтобы запутать бедных разработчиков :).  В начале все просто — как в Word. Есть Shapes у которого в свою очередь есть метод AddOLEObject, с практически теме же параметрами.

Далее, по логике вещей, у Shapes должно быть свойство-объект OLEFormat. Проверяем — действительно есть, но…свойства другие, точнее одно из свойств другое, а большинства вообще нет. Но, мы люди не гордые — будем управляться с тем, что есть:

Свойство Описание
Application При использовании без классификатора объектов, это свойство возвращает объект приложения, представляющий приложение Microsoft Excel.
При использовании с объектом Qualifier, это свойство возвращает объект приложения, которое использовалось для создания объекта
Object Возвращает OLE Automation объект ассоциированный с OLE объектом
Parent Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat
progID Возвращает программный идентификатор (ProgID) для указанного объекта OLE.

Как видите свойств не много. Главное, что осталось свойство Object — вот его мы и попробуем использовать в своих корыстных целях.

За что следует, наверное, сказать спасибо разработчикам Excel, так это за то, что они предусмотрели сразу объект OLEObjects предоставляющий нам в распоряжение все OLE-объекты листа. Используя этот объект мы минуем использование Shapes. Например так:

MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects.Count

Мы получаем число OLE-объектов документа.

MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects(1)

соответственно даст доступ к первому из OLE-объектов документа, а уж с ним-то нам и предстоит работать. Итак, рассмотрим следующую задачку: необходимо вставить в документ Excel пустой документ Word и написать в нем любую строку.

Чтобы не повторяться в применениях метода — вставим в Excel уже готовый документ Word из файла:

...
 
MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.Add(FileName:=doc, Left:=10, Top:=10, Width:=300, Height:=300);
MyOLE:=MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.item(1);
MyOLE.Activate;
ShowMessage(MyOle.ProgID); //убедимся, что объект относится к Word
ShowMessage(MyOle.Object.Application.Name); //запросим имя приложения
MyOle.Object.Application.ActiveDocument.Range.InsertAfter('Привет');
....

Обратите внимание, в данном случае мы использовали для работы с OLE-объектом не Shapes, а OLEObjects. Попробуйте воспроизвести те же самые действия как в случае работы с Excel из Word, т.е. воспользоваться свойством Object у объекта ObjectFormat. Думаю Вы будите «приятно» удивлены, т.к. в результате запроса имени приложения Вам вернется не Word как ожидалось, а Excel — следовательно работать с OLE-объектом становится невозможно.

Также следует отметить, что прежде, чем приступать к редактированию OLE-объекта, следует его предварительно активировать.

Вот так можно работать с Excel из Word и с Word из Excel и при этом не выходить из Delphi :). Ну, а для чего это использовать — решать Вам. Я только показал Вам возможности работы в Delphi с программами Word и Excel.

Книжная полка

Название:Разработка приложений Microsoft Office 2007 в Delphi

Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.

купить книгу delphi на ЛитРес

0
0
голоса

Рейтинг статьи

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Связывание и внедрение объектов (OLE) – это технология, разработанная Microsoft, которая позволяет приложениям Office взаимодействовать с другими приложениями. Это позволяет одному приложению для редактирования отправить часть документа в другие приложения, а затем импортировать или вернуть его вместе с другим содержимым.

Например, если Excel пытается связаться с PowerPoint, он отправляет команду объекту OLE и ожидает ответа от PowerPoint.

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

Microsoft Excel ожидает, пока другое приложение завершит действие OLE

Существует три распространенных причины того, что Microsoft Excel ожидает, пока другое приложение завершит сообщение OLE actio n:

  1. Добавление в приложение слишком большого количества надстроек, из которых один или несколько повреждены.
  2. Excel пытается открыть файл, созданный в каком-либо другом приложении, или извлечь данные из активного
  3. С помощью параметра «Отправить как вложение» в Excel можно отправить лист Excel по электронной почте.

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

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

1. Включение функции «Игнорировать другие приложения, использующие DDE».

1] Откройте лист Excel и перейдите в меню «Файл». В меню Файл выберите Параметры.

2] Откроется диалоговое окно параметров Excel. Перейдите на вкладку «Дополнительно» и прокрутите вниз до области «Общие». Там проверьте ‘Игнорируйте другие приложения, которые используют динамический обмен данными (DDE)‘.

Это должно уменьшить часть нагрузки на приложение и сделать его легче. Попробуйте перезапустить Excel после этого.

2. Отключение надстроек

1] Откройте лист Excel и перейдите в меню «Файл». В меню «Файл» выберите «Параметры».

2] Появится диалоговое окно «Параметры Excel». На вкладках слева нажмите Надстройки.

3] В нижней части этого окна находится окно управления. Выберите надстройки Excel и нажмите кнопку «Перейти» рядом с ней. Это заполняет список надстроек.

4] Снимите все флажки рядом с надстройками в поле Доступные надстройки и нажмите кнопку ОК.

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

3: Использование других методов для прикрепления книги Excel

Использование встроенной в Excel опции «Отправить с помощью электронной почты» для отправки книги в виде вложения также может привести к отображению вышеуказанной ошибки OLE. Но вы можете решить эту проблему, прикрепив книгу Excel к своему сообщению через приложение электронной почты. Вы можете отправить свою книгу, прикрепив ее в виде файла к сообщению электронной почты в Outlook 2013/2010 или Hotmail. Фактически, вы можете использовать любое почтовое приложение на ваш выбор, чтобы обойти проблему.

Решения, обсуждаемые в этом посте, являются одними из самых эффективных и популярных, используемых для устранения ошибки Excel, упомянутой выше в обсуждении. Надеюсь, что-то здесь поможет вам.

Like this post? Please share to your friends:
  • Что такое объединенные ячейки в excel
  • Что такое область применения табличного процессора excel
  • Что такое объединение ячеек excel
  • Что такое область данных в excel
  • Что такое нумерованный список word 2007