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 описують зовнішнє джерело, а не об’єкт, який містить власні дані.

Чи можу я прочитати підпис або значення елемента керування checkbox?

Так — приведіть 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

Дивіться також

 Українська