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 |