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 |