Objets OLE et contrôles ActiveX
Objets OLE et contrôles ActiveX
Aspose.Words FOSS pour .NET fournit un accès en lecture aux objets OLE incorporés et aux contrôles Forms 2.0 ActiveX via le point d’entrée OleFormat et ses classes associées dans Aspose.Words.Drawing et Aspose.Words.Drawing.Ole.
Accéder aux données d’un objet OLE incorporé
OleFormat est exposé par un Shape incorporé et fournit un accès aux données brutes et aux métadonnées de l’objet incorporé. SuggestedFileName et SuggestedExtension décrivent comment l’objet incorporé serait enregistré, ProgId identifie l’application serveur OLE qui l’a créé, et IsLink distingue un objet lié (SourceFullName/SourceItem pointent vers la source externe) d’un objet entièrement incorporé. GetOleEntry(oleEntryName) lit un flux nommé spécifique à partir de la structure de fichier composé OLE, GetRawData() renvoie l’ensemble des données brutes de l’objet, et Save(fileName) / Save(stream) écrivent les données natives de l’objet incorporé sur le disque ou vers un flux — utile pour extraire le fichier incorporé d’origine (par exemple une feuille de calcul ou une présentation incorporée) sans l’ouvrir dans son application native. OlePackage, accessible via OleFormat.OlePackage, expose FileName et DisplayName pour les objets incorporés comme un paquet OLE.
Travailler avec les contrôles Forms 2.0 ActiveX
Lorsque l’objet incorporé est un contrôle Microsoft Forms 2.0 ActiveX (cases à cocher, zones de texte, listes déroulantes et contrôles interactifs similaires plutôt que des documents incorporés), OleFormat.OleControl renvoie un OleControl. Vérifiez sa propriété IsForms2OleControl, et si true, convertissez-la en Forms2OleControl (la classe de base abstraite de tous les contrôles Forms 2.0) pour accéder aux propriétés spécifiques au contrôle: Caption, Value, Enabled, Type (une valeur Forms2OleControlType — CheckBox, Textbox, ComboBox, OptionButton, ListBox, CommandButton, et d’autres), ainsi que les propriétés visuelles ForeColor, BackColor, Width et Height. Les contrôles conteneurs tels que les cadres exposent leurs contrôles imbriqués via ChildNodes, un Forms2OleControlCollection.
Conseils et meilleures pratiques
- Vérifiez
OleFormat.IsLinkavant de supposer que les données de l’objet intégré sont présentes localement — les objets liés font référence à un fichier externe viaSourceFullNameau lieu d’intégrer leur contenu. - Utilisez
SuggestedExtensionconjointement avecSave()pour reconstruire un nom de fichier de sortie cohérent lors de l’extraction en masse d’objets intégrés. - Vérifiez toujours
OleControl.IsForms2OleControlavant de le convertir enForms2OleControl— tous lesOleControlne sont pas des contrôles Forms 2.0. Forms2OleControlCollection.Countet l’énumération viaGetEnumerator()vous permettent de parcourir les contrôles imbriqués à l’intérieur d’un cadre ou d’un contrôle conteneur multi-pages.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
GetRawData() renvoie des données inattendues/vide | L’objet est un lien (IsLink == true), pas intégré | Vérifiez d’abord IsLink ; résolvez SourceFullName pour les objets liés |
InvalidCastException cast OleControl en Forms2OleControl | Le contrôle n’est pas un contrôle Forms 2.0 | Vérifiez IsForms2OleControl avant de caster |
GetOleEntry() renvoie null pour un flux nommé | Le nom du flux n’existe pas dans la structure de fichier composé de cet objet | Énumérez les noms réels des entrées plutôt que de supposer un nom fixe |
| Contrôles imbriqués à l’intérieur d’un cadre non trouvés | Seul le OleControl de niveau supérieur a été vérifié, pas ChildNodes | Récursivement dans Forms2OleControl.ChildNodes pour les contrôles de conteneur |
FAQ
Comment extraire un objet Excel ou PowerPoint intégré d’un document Word?
Accédez au OleFormat de la forme, puis appelez Save(fileName) ou GetRawData() pour récupérer les octets natifs de l’objet intégré; utilisez SuggestedExtension pour nommer correctement le fichier de sortie.
Quelle est la différence entre un objet OLE incorporé et un contrôle Forms 2.0?
Un objet OLE incorporé (accédé via OleFormat directement) est généralement un autre document (tableur, présentation); un contrôle Forms 2.0 (OleFormat.OleControl → Forms2OleControl) est un élément d’interface interactif comme une case à cocher ou une zone de texte.
Comment savoir si un objet OLE est lié plutôt qu’incorporé?
Vérifiez OleFormat.IsLink — lorsque true, SourceFullName et SourceItem décrivent la source externe au lieu que l’objet contienne ses propres données.
Puis-je lire la légende ou la valeur d’un contrôle case à cocher?
Oui — convertissez le OleControl en Forms2OleControl (après avoir confirmé IsForms2OleControl) et lisez Caption et Value.
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
OleFormat | Point d’entrée pour les données et les métadonnées d’un objet OLE intégré |
OleFormat.GetRawData() | Récupérer les octets bruts de l’objet intégré |
OleFormat.Save() | Enregistrer les données natives de l’objet intégré dans un fichier ou un flux |
OlePackage | Nom de fichier/nom d’affichage pour un objet OLE Package |
OleControl | Représentation de base d’un contrôle ActiveX intégré |
Forms2OleControl | Contrôle Microsoft Forms 2.0 (case à cocher, zone de texte, liste déroulante, etc.) |
Forms2OleControlCollection | Collection de nœuds enfants Forms2OleControl (p. ex. à l’intérieur d’un cadre) |
Forms2OleControlType | Énumération des types de contrôles Forms 2.0 |