Objetos OLE y controles ActiveX
Objetos OLE y controles ActiveX
Aspose.Words FOSS para .NET proporciona acceso de lectura a objetos OLE incrustados y controles ActiveX de Forms 2.0 a través del punto de entrada OleFormat y sus clases relacionadas en Aspose.Words.Drawing y Aspose.Words.Drawing.Ole.
Acceso a los datos del objeto OLE incrustado
OleFormat se expone mediante un Shape incrustado y brinda acceso a los datos brutos y a los metadatos del objeto incrustado. SuggestedFileName y SuggestedExtension describen cómo se guardaría el objeto incrustado, ProgId identifica la aplicación servidor OLE que lo creó, y IsLink distingue un objeto enlazado (SourceFullName/SourceItem apuntan a la fuente externa) de uno totalmente incrustado. GetOleEntry(oleEntryName) lee un flujo con nombre específico de la estructura de archivo compuesto OLE, GetRawData() devuelve los datos brutos completos del objeto, y Save(fileName) / Save(stream) escriben los datos nativos del objeto incrustado en disco o en un flujo — útil para extraer el archivo original incrustado (por ejemplo una hoja de cálculo o presentación incrustada) sin abrirlo en su aplicación nativa. OlePackage, accesible a través de OleFormat.OlePackage, expone FileName y DisplayName para objetos incrustados como un Paquete OLE.
Trabajando con controles ActiveX de Forms 2.0
Cuando el objeto incrustado es un control ActiveX de Microsoft Forms 2.0 (casillas de verificación, cuadros de texto, listas desplegables y controles interactivos similares en lugar de documentos incrustados), OleFormat.OleControl devuelve un OleControl. Verifique su propiedad IsForms2OleControl, y si true, conviértalo a Forms2OleControl (la clase base abstracta para todos los controles de Forms 2.0) para acceder a las propiedades específicas del control: Caption, Value, Enabled, Type (un valor Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton, y otros), más propiedades visuales ForeColor, BackColor, Width y Height. Los controles contenedores, como los marcos, exponen sus controles anidados a través de ChildNodes, un Forms2OleControlCollection.
Consejos y mejores prácticas
- Verifique
OleFormat.IsLinkantes de asumir que los datos del objeto incrustado están presentes localmente — los objetos vinculados hacen referencia a un archivo externo a través deSourceFullNameen lugar de incrustar su contenido. - Utilice
SuggestedExtensionjunto conSave()para reconstruir un nombre de archivo de salida razonable al extraer objetos incrustados en bloque. - Siempre verifique
OleControl.IsForms2OleControlantes de convertir aForms2OleControl— no todos losOleControlson controles de Forms 2.0. Forms2OleControlCollection.County la enumeración medianteGetEnumerator()le permiten recorrer controles anidados dentro de un marco o control contenedor de varias páginas.
Problemas comunes
| Problema | Causa | Corrección |
|---|---|---|
GetRawData() devuelve datos inesperados/vacíos | El objeto es un enlace (IsLink == true), no está incrustado | Verifique IsLink primero; resuelva SourceFullName para objetos vinculados |
InvalidCastException convirtiendo OleControl a Forms2OleControl | El control no es un control de Forms 2.0 | Verifique IsForms2OleControl antes de hacer casteo |
GetOleEntry() devuelve null para un flujo con nombre | El nombre del flujo no existe en la estructura de archivo compuesto de este objeto | Enumere los nombres reales de las entradas en lugar de asumir un nombre fijo |
| No se encontraron controles anidados dentro de un marco | Solo se verificó OleControl a nivel superior, no ChildNodes | Recorra recursivamente Forms2OleControl.ChildNodes para los controles contenedores |
FAQ
¿Cómo extraigo un objeto incrustado de Excel o PowerPoint de un documento de Word?
Acceda al OleFormat de la forma, luego invoque Save(fileName) o GetRawData() para obtener los bytes nativos del objeto incrustado; use SuggestedExtension para nombrar el archivo de salida de manera adecuada.
¿Cuál es la diferencia entre un objeto OLE incrustado y un control Forms 2.0?
Un objeto OLE incrustado (accedido mediante OleFormat directamente) suele ser otro documento (hoja de cálculo, presentación); un control Forms 2.0 (OleFormat.OleControl → Forms2OleControl) es un elemento de interfaz interactivo como una casilla de verificación o un cuadro de texto.
¿Cómo puedo saber si un objeto OLE está enlazado en lugar de incrustado?
Verifique OleFormat.IsLink — cuando true, SourceFullName y SourceItem describen la fuente externa en lugar de que el objeto contenga sus propios datos.
¿Puedo leer la etiqueta o el valor de un control de casilla de verificación?
Sí — convierta OleControl a Forms2OleControl (después de confirmar IsForms2OleControl) y lea Caption y Value.
API Reference Resumen
| Clase / Método | Descripción |
|---|---|
OleFormat | Punto de entrada para los datos y metadatos de un objeto OLE incrustado |
OleFormat.GetRawData() | Recuperar los bytes sin procesar del objeto incrustado |
OleFormat.Save() | Guardar los datos nativos del objeto incrustado en un archivo o flujo |
OlePackage | Nombre de archivo/nombre para mostrar de un objeto OLE Package |
OleControl | Representación base de un control ActiveX incrustado |
Forms2OleControl | Control de Microsoft Forms 2.0 (casilla de verificación, cuadro de texto, cuadro combinado, etc.) |
Forms2OleControlCollection | Colección de nodos Forms2OleControl hijos (p.ej., dentro de un marco) |
Forms2OleControlType | Enumeración de tipos de control de Forms 2.0 |