OLE-объекты и элементы управления ActiveX

OLE-объекты и элементы управления ActiveX

OLE-объекты и ActiveX элементы управления

Aspose.Words FOSS для .NET предоставляет возможность чтения встроенных OLE-объектов и контролов Forms 2.0 ActiveX через точку входа OleFormat и связанные с ней классы в Aspose.Words.Drawing и Aspose.Words.Drawing.Ole.


Доступ к данным встроенного OLE-объекта

OleFormat предоставляется встроенным Shape и обеспечивает доступ к необработанным данным и метаданным встроенного объекта. SuggestedFileName и SuggestedExtension описывают, как будет сохранён встроенный объект, ProgId определяет приложение-сервер OLE, которое его создало, а IsLink различает связанный объект (SourceFullName/SourceItem указывают на внешний источник) от полностью встроенного. GetOleEntry(oleEntryName) считывает конкретный именованный поток из структуры составного файла OLE, GetRawData() возвращает полные необработанные данные объекта, а Save(fileName) / Save(stream) записывают нативные данные встроенного объекта на диск или в поток — это полезно для извлечения оригинального встроенного файла (например, встроенной таблицы или презентации) без открытия его в родном приложении. OlePackage, доступный через OleFormat.OlePackage, раскрывает FileName и DisplayName для объектов, встроенных как OLE Package.


Работа с контролями Forms 2.0 ActiveX

Если встроенный объект представляет собой элемент управления Microsoft Forms 2.0 ActiveX (флажки, текстовые поля, комбобоксы и аналогичные интерактивные элементы, а не встроенные документы), OleFormat.OleControl возвращает OleControl. Проверьте его свойство IsForms2OleControl, и если true, приведите его к типу Forms2OleControl (абстрактный базовый класс для всех контролей Forms 2.0), чтобы получить свойства, специфичные для конкретного контрола: Caption, Value, Enabled, Type (значение Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton и др.), а также визуальные свойства ForeColor, BackColor, Width и Height. Контейнерные элементы управления, такие как фреймы, предоставляют доступ к вложенным элементам через ChildNodes, Forms2OleControlCollection.


Советы и лучшие практики

  • Проверьте OleFormat.IsLink перед тем как предполагать, что данные встроенного объекта находятся локально — связанные объекты ссылаются на внешний файл через SourceFullName, а не встраивают его содержимое.
  • Используйте SuggestedExtension совместно с Save() для восстановления разумного имени выходного файла при массовом извлечении встроенных объектов.
  • Всегда проверяйте OleControl.IsForms2OleControl перед приведением к Forms2OleControl — не каждый OleControl является элементом управления Forms 2.0.
  • Forms2OleControlCollection.Count и перечисление через GetEnumerator() позволяют обходить вложенные элементы управления внутри кадра или многостраничного контейнерного элемента управления.

Распространённые проблемы

ПроблемаПричинаИсправление
GetRawData() возвращает неожиданные/пустые данныеОбъект является ссылкой (IsLink == true), а не встроеннымСначала проверьте IsLink; разрешите SourceFullName для связанных объектов
InvalidCastException приводит OleControl к Forms2OleControlЭлемент управления не является элементом управления Forms 2.0Проверьте IsForms2OleControl перед приведением типов
GetOleEntry() возвращает null для именованного потокаИмя потока не существует в структуре составного файла этого объектаПеречислите фактические имена записей, а не предполагайте фиксированное имя
Вложенные элементы управления внутри кадра не найденыПроверен только верхний уровень OleControl, а не ChildNodesРекурсивно обходите Forms2OleControl.ChildNodes для контейнерных элементов управления

FAQ

Как извлечь встроенный объект Excel или PowerPoint из документа Word?

Получите OleFormat формы, затем вызовите Save(fileName) или GetRawData(), чтобы извлечь оригинальные байты встроенного объекта; используйте SuggestedExtension для корректного именования выходного файла.

В чем разница между встроенным объектом OLE и элементом управления Forms 2.0?

Встроенный объект OLE (доступный напрямую через OleFormat) обычно представляет собой другой документ (таблица, презентация); элемент управления Forms 2.0 (OleFormat.OleControl → Forms2OleControl) — это интерактивный элемент интерфейса, такой как флажок или текстовое поле.

Как определить, является ли объект OLE связанным, а не встроенным?

Проверьте OleFormat.IsLink — когда true, SourceFullName и SourceItem описывают внешний источник, а не объект, содержащий собственные данные.

Могу ли я прочитать подпись или значение элемента управления флажком?

Да — приведите OleControl к типу Forms2OleControl (после подтверждения IsForms2OleControl) и прочитайте Caption и Value.


API Reference Сводка

Класс / МетодОписание:
OleFormatТочка входа для данных и метаданных вложенного объекта OLE
OleFormat.GetRawData()Получить необработанные байты вложенного объекта
OleFormat.Save()Сохранить исходные данные вложенного объекта в файл или поток
OlePackageИмя файла/отображаемое имя для объекта OLE Package
OleControlБазовое представление встроенного ActiveX элемента управления
Forms2OleControlЭлемент управления Microsoft Forms 2.0 (флажок, текстовое поле, комбобокс и т.д.)
Forms2OleControlCollectionКоллекция дочерних узлов Forms2OleControl (например, внутри кадра)
Forms2OleControlTypeПеречисление типов элементов управления Forms 2.0

См. также:

 Русский